home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / winsock / ircii2-6.zip / SRC\IRCII-2.6\SOURCE\KEYS.C < prev    next >
C/C++ Source or Header  |  1994-12-29  |  61KB  |  2,162 lines

  1. /*
  2.  * keys.c: Does command line parsing, etc 
  3.  *
  4.  *
  5.  * Written By Michael Sandrof
  6.  *
  7.  * Copyright(c) 1990 
  8.  *
  9.  * See the COPYRIGHT file, or do a HELP IRCII COPYRIGHT 
  10.  */
  11.  
  12. #ifndef lint
  13. static    char    rcsid[] = "@(#)$Id: keys.c,v 1.11 1994/10/08 13:49:21 mrg Stab $";
  14. #endif
  15.  
  16. #include "irc.h"
  17.  
  18. #include "output.h"
  19. #include "keys.h"
  20. #include "names.h"
  21. #include "ircaux.h"
  22. #include "window.h"
  23. #include "edit.h"
  24. #include "vars.h"
  25. #include "term.h"
  26.  
  27.  
  28. extern    void    input_add_character();
  29. extern    void    input_backward_word();
  30. extern    void    input_forward_word();
  31. extern    void    input_delete_previous_word();
  32. extern    void    input_delete_next_word();
  33. extern    void    forward_character();
  34. extern    void    backward_character();
  35. extern    void    input_clear_to_bol();
  36. extern    void    input_clear_line();
  37. extern    void    input_beginning_of_line();
  38. extern    void    input_end_of_line();
  39. extern    void    input_clear_to_eol();
  40. extern    void    refresh_inputline();
  41. extern    RETSIGTYPE    refresh_screen();
  42. extern    void    input_delete_character();
  43. extern    void    input_backspace();
  44. extern    void    backward_history();
  45. extern    void    forward_history();
  46. extern    void    toggle_insert_mode();
  47. extern    void    input_transpose_characters();
  48. extern    void    input_yank_cut_buffer();
  49. extern    void    send_line();
  50. extern    void    meta1_char();
  51. extern    void    meta2_char();
  52. extern    void    meta3_char();
  53. extern    void    meta4_char();
  54. extern    void    irc_quit();
  55. extern    void    quote_char();
  56. extern    void    type_text();
  57. extern    void    parse_text();
  58. extern    void    toggle_stop_screen();
  59. extern    void    command_completion();
  60. extern    void    clear_screen();
  61. extern    void    enter_digraph();
  62. extern    void    scrollback_backwards();
  63. extern    void    scrollback_forwards();
  64. extern    void    scrollback_end();
  65. extern    void    scrollback_start();
  66. extern    void    enter_menu();
  67.  
  68. /*
  69.  * lookup_function: looks up an irc function by name, and returns the
  70.  * number of functions that match the name, and sets where index points
  71.  * to to be the index of the (first) function found.
  72.  */
  73. int
  74. lookup_function(name, index)
  75.     char    *name;
  76.     int    *index;
  77. {
  78.     int    len,
  79.         cnt,
  80.         i;
  81.  
  82.     if (name)
  83.     {
  84.         upper(name);
  85.         len = strlen(name);
  86.         cnt = 0;
  87.         *index = -1;
  88.         for (i = 0; i < NUMBER_OF_FUNCTIONS; i++)
  89.         {
  90.             if (my_strnicmp(name, key_names[i].name, len) == 0)
  91.             {
  92.                 cnt++;
  93.                 if (*index == -1)
  94.                     *index = i;
  95.             }
  96.         }
  97.         if (*index == -1)
  98.             return (0);
  99.         if (my_stricmp(name, key_names[*index].name) == 0)
  100.             return (1);
  101.         else
  102.             return (cnt);
  103.     }
  104.     return (0);
  105. }
  106.  
  107. /*
  108.  * display_key: converts the character c to a displayable form and returns
  109.  * it.  Very simple indeed 
  110.  */
  111. unsigned char *
  112. display_key(c)
  113.     unsigned char c;
  114. {
  115.     static    unsigned char key[3];
  116.  
  117.     key[2] = (char) 0;
  118.     if (c < 32)
  119.     {
  120.         key[0] = '^';
  121.         key[1] = c + 64;
  122.     }
  123.     else if (c == '\177')
  124.     {
  125.         key[0] = '^';
  126.         key[1] = '?';
  127.     }
  128.     else
  129.     {
  130.         key[0] = c;
  131.         key[1] = (char) 0;
  132.     }
  133.     return (key);
  134. }
  135.  
  136. /*
  137.  * show_binding: given the ascii value of a key and a meta key status (1 for
  138.  * meta1 keys, 2 for meta2 keys, anything else for normal keys), this will
  139.  * display the key binding for the key in a nice way
  140.  */
  141. void
  142. show_binding(c, meta)
  143.     unsigned char    c;
  144.     int    meta;
  145. {
  146.     KeyMap    *map;
  147.     char    *meta_str;
  148.  
  149.     switch (meta)
  150.     {
  151.     case 1:
  152.         map = meta1_keys;
  153.         meta_str = "META1-";
  154.         break;
  155.     case 2:
  156.         map = meta2_keys;
  157.         meta_str = "META2-";
  158.         break;
  159.     case 3:
  160.         map = meta3_keys;
  161.         meta_str = "META3-";
  162.         break;
  163.     case 4:
  164.         map = meta4_keys;
  165.         meta_str = "META4-";
  166.         break;
  167.     default:
  168.         map = keys;
  169.         meta_str = empty_string;
  170.         break;
  171.     }
  172.     say("%s%s is bound to %s %s", meta_str, display_key(c),
  173.         key_names[map[c].index].name, (map[c].stuff &&
  174.         (*(map[c].stuff))) ? map[c].stuff : "");
  175. }
  176.  
  177. /*
  178.  * parse_key: converts a key string. Accepts any key, or ^c where c is any
  179.  * key (representing control characters), or META1- or META2- for meta1 or
  180.  * meta2 keys respectively.  The string itself is converted to true ascii
  181.  * value, thus "^A" is converted to 1, etc.  Meta key info is removed and
  182.  * returned as the function value, 0 for no meta key, 1 for meta1, and 2 for
  183.  * meta2.  Thus, "META1-a" is converted to "a" and a 1 is returned.
  184.  * Furthermore, if ^X is bound to META2_CHARACTER, and "^Xa" is passed to
  185.  * parse_key(), it is converted to "a" and 2 is returned.  Do ya understand
  186.  * this? 
  187.  */
  188. int
  189. parse_key(key_str)
  190.     char    *key_str;
  191. {
  192.     char    *ptr1,
  193.         *ptr2;
  194.     unsigned char    c;
  195.     int    meta = 0;
  196.  
  197.     ptr2 = ptr1 = key_str;
  198.     while (*ptr1)
  199.     {
  200.         if (*ptr1 == '^')
  201.         {
  202.             ptr1++;
  203.             switch (*ptr1)
  204.             {
  205.             case 0:
  206.                 *(ptr2++) = '^';
  207.                 break;
  208.             case '?':
  209.                 *(ptr2++) = '\177';
  210.                 ptr1++;
  211.                 break;
  212.             default:
  213.                 c = *(ptr1++);
  214.                 if (islower(c))
  215.                     c = toupper(c);
  216.                 if (c < 64)
  217.                 {
  218.                     say("Illegal key sequence: ^%c", c);
  219.                     return (-1);
  220.                 }
  221.                 *(ptr2++) = c - 64;
  222.             }
  223.         }
  224.         else
  225.             *(ptr2++) = *(ptr1++);
  226.     }
  227.     *ptr2 = (char) 0;
  228.     if (strlen(key_str) > 1)
  229.     {
  230.         if (my_strnicmp(key_str, "META1-", 6) == 0)
  231.         {
  232.             strcpy(key_str, key_str + 6);
  233.             meta = 1;
  234.         }
  235.         else if (my_strnicmp(key_str, "META2-", 6) == 0)
  236.         {
  237.             strcpy(key_str, key_str + 6);
  238.             meta = 2;
  239.         }
  240.         else if (my_strnicmp(key_str, "META3-", 6) == 0)
  241.         {
  242.             strcpy(key_str, key_str + 6);
  243.             meta = 3;
  244.         }
  245.         else if (my_strnicmp(key_str, "META4-", 6) == 0)
  246.         {
  247.             strcpy(key_str, key_str + 6);
  248.             meta = 4;
  249.         }
  250.         else if (keys[(u_char) *key_str].index == META1_CHARACTER)
  251.         {
  252.             meta = 1;
  253.             strcpy(key_str, key_str + 1);
  254.         }
  255.         else if (keys[(u_char) *key_str].index == META2_CHARACTER)
  256.         {
  257.             meta = 2;
  258.             strcpy(key_str, key_str + 1);
  259.         }
  260.         else if (keys[(u_char) *key_str].index == META3_CHARACTER)
  261.         {
  262.             meta = 3;
  263.             strcpy(key_str, key_str + 1);
  264.         }
  265.         else if (keys[(u_char) *key_str].index == META4_CHARACTER)
  266.         {
  267.             meta = 4;
  268.             strcpy(key_str, key_str + 1);
  269.         }
  270.         else
  271.         {
  272.             say("Illegal key sequence: %s is not a meta-key",
  273.                 display_key(*key_str));
  274.             return (-1);
  275.         }
  276.     }
  277.     return (meta);
  278. }
  279.  
  280. /*
  281.  * bind_it: does the actually binding of the function to the key with the
  282.  * given meta modifier
  283.  */
  284. static    void
  285. bind_it(function, string, key, meta)
  286.     char    key;
  287.     char    *function,
  288.         *string;
  289.     int    meta;
  290. {
  291.     KeyMap    *km;
  292.     int    cnt,
  293.     index,
  294.     i;
  295.  
  296.     switch (meta)
  297.     {
  298.     case 0:
  299.         km = keys;
  300.         break;
  301.     case 1:
  302.         km = meta1_keys;
  303.         break;
  304.     case 2:
  305.         km = meta2_keys;
  306.         break;
  307.     case 3:
  308.         km = meta3_keys;
  309.         break;
  310.     case 4:
  311.         km = meta4_keys;
  312.         break;
  313.     default:
  314.         km = keys;
  315.     }
  316.     if (*string == (char) 0)
  317.         string = (char *) 0;
  318.     switch (cnt = lookup_function(function, &index))
  319.     {
  320.     case 0:
  321.         say("No such function: %s", function);
  322.         break;
  323.     case 1:
  324.         if (! km[key].changed)
  325.         {
  326.             if ((km[key].index != index) ||
  327.                     ((string == (char *) 0) &&
  328.                     km[key].stuff) ||
  329.                     ((km[key].stuff == (char *) 0) &&
  330.                     string) || (string && km[key].stuff &&
  331.                     strcmp(km[key].stuff,string)))
  332.                 km[key].changed = 1;
  333.         }
  334.         km[key].index = index;
  335.         km[key].global = loading_global;
  336.         malloc_strcpy(&(km[key].stuff), string);
  337.         show_binding(key, meta);
  338.         break;
  339.     default:
  340.         say("Ambiguous function name: %s", function);
  341.         for (i = 0; i < cnt; i++, index++)
  342.             put_it("%s", key_names[index].name);
  343.         break;
  344.     }
  345. }
  346.  
  347. /* parsekeycmd: does the PARSEKEY command.  */
  348. void
  349. parsekeycmd(command, args)
  350.     char    *command,
  351.         *args;
  352. {
  353.     int    i;
  354.     char    *arg;
  355.  
  356.     if ((arg = next_arg(args, &args)) != NULL)
  357.     {
  358.         switch (lookup_function(arg, &i))
  359.         {
  360.         case 0:
  361.             say("No such function %s", arg);
  362.             return;
  363.         case 1:
  364.             key_names[i].func();
  365.             break;
  366.         default:
  367.             say("Ambigious function %s", arg);
  368.             break;
  369.         }
  370.     }
  371. }
  372.  
  373. /*
  374.  * bindcmd: the bind command, takes a key sequence followed by a function
  375.  * name followed by option arguments (used depending on the function) and
  376.  * binds a key.  If no function is specified, the current binding for that
  377.  * key is shown 
  378.  */
  379. /*ARGSUSED*/
  380. void
  381. bindcmd(command, args)
  382.     char    *command,
  383.         *args;
  384. {
  385.     char    *key,
  386.         *function;
  387.     int    meta;
  388.  
  389.     if ((key = next_arg(args, &args)) != NULL)
  390.     {
  391.         if ((meta = parse_key(key)) == -1)
  392.             return;
  393.         if (strlen(key) > 1)
  394.         {
  395.             say("Key sequences may not contain more than two keys");
  396.             return;
  397.         }
  398.         if ((function = next_arg(args, &args)) != NULL)
  399.             bind_it(function, args, *key, meta);
  400.         else
  401.             show_binding(*key, meta);
  402.     }
  403.     else
  404.     {
  405.         int    i;
  406.         int    charsize = charset_size();
  407.  
  408.         for (i = 0; i < charsize; i++)
  409.         {
  410.             if ((keys[i].index != NOTHING) && (keys[i].index !=
  411.                     SELF_INSERT))
  412.                 show_binding(i, 0);
  413.         }
  414.         for (i = 0; i < charsize; i++)
  415.         {
  416.             if ((meta1_keys[i].index != NOTHING) &&
  417.                     (meta1_keys[i].index != SELF_INSERT))
  418.                 show_binding(i, 1);
  419.         }
  420.         for (i = 0; i < charsize; i++)
  421.         {
  422.             if ((meta2_keys[i].index != NOTHING) &&
  423.                     (meta2_keys[i].index != SELF_INSERT))
  424.                 show_binding(i, 2);
  425.         }
  426.         for (i = 0; i < charsize; i++)
  427.         {
  428.             if ((meta3_keys[i].index != NOTHING) &&
  429.                     (meta3_keys[i].index != SELF_INSERT))
  430.                 show_binding(i, 3);
  431.         }
  432.         for (i = 0; i < charsize; i++)
  433.         {
  434.             if ((meta4_keys[i].index != NOTHING) &&
  435.                     (meta4_keys[i].index != SELF_INSERT))
  436.                 show_binding(i, 4);
  437.         }
  438.     }
  439. }
  440.  
  441. /*
  442.  * rbindcmd: does the rbind command.  you give it a string that something
  443.  * is bound to and it tells you all the things that are bound to that
  444.  * functions
  445.  */
  446. void
  447. rbindcmd(command, args)
  448.     char    *command,
  449.         *args;
  450. {
  451.     int    f;
  452.     char    *arg;
  453.  
  454.     if ((arg = next_arg(args, &args)) != NULL)
  455.     {
  456.         int    i;
  457.         int    charsize = charset_size();
  458.  
  459.         switch (lookup_function(arg, &f))
  460.         {
  461.         case 0:
  462.             say("No such function %s", arg);
  463.             return;
  464.  
  465.         case 1:
  466.             break;
  467.  
  468.         default:
  469.             say("Ambigious function %s", arg);
  470.             return;
  471.         }
  472.  
  473.         for (i = 0; i < charsize; i++)
  474.             if (f == keys[i].index)
  475.                 show_binding(i, 0);
  476.         for (i = 0; i < charsize; i++)
  477.             if (f == meta1_keys[i].index)
  478.                 show_binding(i, 1);
  479.         for (i = 0; i < charsize; i++)
  480.             if (f == meta2_keys[i].index)
  481.                 show_binding(i, 2);
  482.         for (i = 0; i < charsize; i++)
  483.             if (f == meta3_keys[i].index)
  484.                 show_binding(i, 3);
  485.         for (i = 0; i < charsize; i++)
  486.             if (f == meta4_keys[i].index)
  487.                 show_binding(i, 4);
  488.     }
  489. }
  490.  
  491. void    (* get_send_line())()
  492. {
  493.     return(key_names[SEND_LINE].func);
  494. }
  495.  
  496. /*
  497.  * change_send_line: Allows you to change the everything bound to SENDLINE in
  498.  * one fell swoop.  Used by the various functions that gather input using the
  499.  * normal irc interface but dont wish to parse it and send it to the server.
  500.  * Sending NULL resets it to send_line()
  501.  */
  502. void
  503. change_send_line(func)
  504.     void    (*func) ();
  505. {
  506.     if (func)
  507.         key_names[SEND_LINE].func = func;
  508.     else
  509.         key_names[SEND_LINE].func = send_line;
  510. }
  511.  
  512. /*
  513.  * type: The TYPE command.  This parses the given string and treats each
  514.  * character as tho it were typed in by the user.  Thus key bindings are used
  515.  * for each character parsed.  Special case characters are control character
  516.  * sequences, specified by a ^ follow by a legal control key.  Thus doing
  517.  * "/TYPE ^B" will be as tho ^B were hit at the keyboard, probably moving the
  518.  * cursor backward one character.
  519.  */
  520. /*ARGSUSED*/
  521. void
  522. type(command, args)
  523.     char    *command,
  524.         *args;
  525. {
  526.     int    c;
  527.     char    key;
  528.  
  529.     while (*args)
  530.     {
  531.         if (*args == '^')
  532.         {
  533.             switch (*(++args))
  534.             {
  535.             case '?':
  536.                 key = '\177';
  537.                 args++;
  538.                 break;
  539.             default:
  540.                 c = *(args++);
  541.                 if (islower(c))
  542.                     c = toupper(c);
  543.                 if (c < 64)
  544.                 {
  545.                     say("Illegal key sequence: ^%c", c);
  546.                     return;
  547.                 }
  548.                 key = c - 64;
  549.                 break;
  550.             }
  551.         }
  552.         else if (*args == '\\')
  553.         {
  554.             key = *++args;
  555.             args++;
  556.         }
  557.         else
  558.             key = *(args++);
  559.         edit_char(key);
  560.     }
  561. }
  562.  
  563. KeyMapNames FAR key_names[] =
  564. {
  565.     { "BACKSPACE",            input_backspace },
  566.     { "BACKWARD_CHARACTER",        backward_character },
  567.     { "BACKWARD_HISTORY",        backward_history },
  568.     { "BACKWARD_WORD",        input_backward_word },
  569.     { "BEGINNING_OF_LINE",        input_beginning_of_line },
  570.     { "CLEAR_SCREEN",        clear_screen },
  571.     { "COMMAND_COMPLETION",        command_completion },
  572.     { "DELETE_CHARACTER",        input_delete_character },
  573.     { "DELETE_NEXT_WORD",        input_delete_next_word },
  574.     { "DELETE_PREVIOUS_WORD",    input_delete_previous_word },
  575.     { "END_OF_LINE",        input_end_of_line },
  576.     { "ENTER_DIGRAPH",        enter_digraph },
  577.     { "ENTER_MENU",            enter_menu },
  578.     { "ERASE_LINE",            input_clear_line },
  579.     { "ERASE_TO_BEG_OF_LINE",    input_clear_to_bol },
  580.     { "ERASE_TO_END_OF_LINE",    input_clear_to_eol },
  581.     { "FORWARD_CHARACTER",        forward_character },
  582.     { "FORWARD_HISTORY",        forward_history },
  583.     { "FORWARD_WORD",        input_forward_word },
  584.     { "META1_CHARACTER",        meta1_char },
  585.     { "META2_CHARACTER",        meta2_char },
  586.     { "META3_CHARACTER",        meta3_char },
  587.     { "META4_CHARACTER",        meta4_char },
  588.     { "NEXT_WINDOW",        next_window },
  589.     { "NOTHING",            NULL },
  590.     { "PARSE_COMMAND",        parse_text },
  591.     { "PREVIOUS_WINDOW",        previous_window },
  592.     { "QUIT_IRC",            irc_quit },
  593.     { "QUOTE_CHARACTER",        quote_char },
  594.     { "REFRESH_INPUTLINE",        refresh_inputline },
  595.     { "REFRESH_SCREEN",        (void (*) ()) refresh_screen },
  596.     { "SCROLL_BACKWARD",        scrollback_backwards },
  597.     { "SCROLL_END",            scrollback_end },
  598.     { "SCROLL_FORWARD",        scrollback_forwards },
  599.     { "SCROLL_START",        scrollback_start },
  600.     { "SELF_INSERT",        input_add_character },
  601.     { "SEND_LINE",            send_line },
  602.     { "STOP_IRC",            term_pause },
  603.     { "SWAP_LAST_WINDOW",        swap_last_window },
  604.     { "SWAP_NEXT_WINDOW",        swap_next_window },
  605.     { "SWAP_PREVIOUS_WINDOW",    swap_previous_window },
  606.     { "SWITCH_CHANNELS",        switch_channels },
  607.     { "TOGGLE_INSERT_MODE",        toggle_insert_mode },
  608.     { "TOGGLE_STOP_SCREEN",        toggle_stop_screen },
  609.     { "TRANSPOSE_CHARACTERS",    input_transpose_characters },
  610.     { "TYPE_TEXT",            type_text },
  611.     { "UNSTOP_ALL_WINDOWS",        unstop_all_windows },
  612.     { "YANK_FROM_CUTBUFFER",    input_yank_cut_buffer }
  613. };
  614.  
  615.  
  616. KeyMap    FAR keys[] =
  617. {
  618.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 0 */
  619.     { BEGINNING_OF_LINE,    0, 0,    (char *) 0 },
  620.     { BACKWARD_CHARACTER,    0, 0,    (char *) 0 },
  621.     { QUIT_IRC,        0, 0,    (char *) 0 },
  622.     { DELETE_CHARACTER,    0, 0,    (char *) 0 },
  623.     { END_OF_LINE,        0, 0,    (char *) 0 },
  624.     { FORWARD_CHARACTER,    0, 0,    (char *) 0 },
  625.     { SELF_INSERT,        0, 0,    (char *) 0 },
  626.  
  627.     { BACKSPACE,        0, 0,    (char *) 0 },    /* 8 */
  628.     { TOGGLE_INSERT_MODE,    0, 0,    (char *) 0 },
  629.     { SEND_LINE,        0, 0,    (char *) 0 },
  630.     { ERASE_TO_END_OF_LINE,    0, 0,    (char *) 0 },
  631.     { REFRESH_SCREEN,    0, 0,    (char *) 0 },
  632.     { SEND_LINE,        0, 0,    (char *) 0 },
  633.     { FORWARD_HISTORY,    0, 0,    (char *) 0 },
  634.     { SELF_INSERT,        0, 0,    (char *) 0 },
  635.  
  636.     { BACKWARD_HISTORY,    0, 0,    (char *) 0 },    /* 16 */
  637.     { QUOTE_CHARACTER,    0, 0,    (char *) 0 },
  638.     { ENTER_MENU,        0, 0,    (char *) 0 },
  639.     { TOGGLE_STOP_SCREEN,    0, 0,    (char *) 0 },
  640.     { TRANSPOSE_CHARACTERS,    0, 0,    (char *) 0 },
  641.     { ERASE_LINE,        0, 0,    (char *) 0 },
  642.     { SELF_INSERT,        0, 0,    (char *) 0 },
  643.     { SELF_INSERT,        0, 0,    (char *) 0 },
  644.  
  645.     { META2_CHARACTER,    0, 0,    (char *) 0 },    /* 24 */
  646.     { YANK_FROM_CUTBUFFER,    0, 0,    (char *) 0 },
  647.             /* And I moved STOP_IRC to META1 26 */
  648.     { ENTER_DIGRAPH,    0, 0,    (char *) 0 },
  649.     { META1_CHARACTER,    0, 0,    (char *) 0 },
  650.     { SELF_INSERT,        0, 0,    (char *) 0 },
  651.     { SELF_INSERT,        0, 0,    (char *) 0 },
  652.     { SELF_INSERT,        0, 0,    (char *) 0 },
  653.     { SELF_INSERT,        0, 0,    (char *) 0 },
  654.  
  655.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 32 */
  656.     { SELF_INSERT,        0, 0,    (char *) 0 },
  657.     { SELF_INSERT,        0, 0,    (char *) 0 },
  658.     { SELF_INSERT,        0, 0,    (char *) 0 },
  659.     { SELF_INSERT,        0, 0,    (char *) 0 },
  660.     { SELF_INSERT,        0, 0,    (char *) 0 },
  661.     { SELF_INSERT,        0, 0,    (char *) 0 },
  662.     { SELF_INSERT,        0, 0,    (char *) 0 },
  663.  
  664.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 40 */
  665.     { SELF_INSERT,        0, 0,    (char *) 0 },
  666.     { SELF_INSERT,        0, 0,    (char *) 0 },
  667.     { SELF_INSERT,        0, 0,    (char *) 0 },
  668.     { SELF_INSERT,        0, 0,    (char *) 0 },
  669.     { SELF_INSERT,        0, 0,    (char *) 0 },
  670.     { SELF_INSERT,        0, 0,    (char *) 0 },
  671.     { SELF_INSERT,        0, 0,    (char *) 0 },
  672.  
  673.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 48 */
  674.     { SELF_INSERT,        0, 0,    (char *) 0 },
  675.     { SELF_INSERT,        0, 0,    (char *) 0 },
  676.     { SELF_INSERT,        0, 0,    (char *) 0 },
  677.     { SELF_INSERT,        0, 0,    (char *) 0 },
  678.     { SELF_INSERT,        0, 0,    (char *) 0 },
  679.     { SELF_INSERT,        0, 0,    (char *) 0 },
  680.     { SELF_INSERT,        0, 0,    (char *) 0 },
  681.  
  682.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 56 */
  683.     { SELF_INSERT,        0, 0,    (char *) 0 },
  684.     { SELF_INSERT,        0, 0,    (char *) 0 },
  685.     { SELF_INSERT,        0, 0,    (char *) 0 },
  686.     { SELF_INSERT,        0, 0,    (char *) 0 },
  687.     { SELF_INSERT,        0, 0,    (char *) 0 },
  688.     { SELF_INSERT,        0, 0,    (char *) 0 },
  689.     { SELF_INSERT,        0, 0,    (char *) 0 },
  690.  
  691.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 64 */
  692.     { SELF_INSERT,        0, 0,    (char *) 0 },
  693.     { SELF_INSERT,        0, 0,    (char *) 0 },
  694.     { SELF_INSERT,        0, 0,    (char *) 0 },
  695.     { SELF_INSERT,        0, 0,    (char *) 0 },
  696.     { SELF_INSERT,        0, 0,    (char *) 0 },
  697.     { SELF_INSERT,        0, 0,    (char *) 0 },
  698.     { SELF_INSERT,        0, 0,    (char *) 0 },
  699.  
  700.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 72 */
  701.     { SELF_INSERT,        0, 0,    (char *) 0 },
  702.     { SELF_INSERT,        0, 0,    (char *) 0 },
  703.     { SELF_INSERT,        0, 0,    (char *) 0 },
  704.     { SELF_INSERT,        0, 0,    (char *) 0 },
  705.     { SELF_INSERT,        0, 0,    (char *) 0 },
  706.     { SELF_INSERT,        0, 0,    (char *) 0 },
  707.     { SELF_INSERT,        0, 0,    (char *) 0 },
  708.  
  709.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 80 */
  710.     { SELF_INSERT,        0, 0,    (char *) 0 },
  711.     { SELF_INSERT,        0, 0,    (char *) 0 },
  712.     { SELF_INSERT,        0, 0,    (char *) 0 },
  713.     { SELF_INSERT,        0, 0,    (char *) 0 },
  714.     { SELF_INSERT,        0, 0,    (char *) 0 },
  715.     { SELF_INSERT,        0, 0,    (char *) 0 },
  716.     { SELF_INSERT,        0, 0,    (char *) 0 },
  717.  
  718.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 88 */
  719.     { SELF_INSERT,        0, 0,    (char *) 0 },
  720.     { SELF_INSERT,        0, 0,    (char *) 0 },
  721.     { SELF_INSERT,        0, 0,    (char *) 0 },
  722.     { SELF_INSERT,        0, 0,    (char *) 0 },
  723.     { SELF_INSERT,        0, 0,    (char *) 0 },
  724.     { SELF_INSERT,        0, 0,    (char *) 0 },
  725.     { SELF_INSERT,        0, 0,    (char *) 0 },
  726.  
  727.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 96 */
  728.     { SELF_INSERT,        0, 0,    (char *) 0 },
  729.     { SELF_INSERT,        0, 0,    (char *) 0 },
  730.     { SELF_INSERT,        0, 0,    (char *) 0 },
  731.     { SELF_INSERT,        0, 0,    (char *) 0 },
  732.     { SELF_INSERT,        0, 0,    (char *) 0 },
  733.     { SELF_INSERT,        0, 0,    (char *) 0 },
  734.     { SELF_INSERT,        0, 0,    (char *) 0 },
  735.  
  736.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 104 */
  737.     { SELF_INSERT,        0, 0,    (char *) 0 },
  738.     { SELF_INSERT,        0, 0,    (char *) 0 },
  739.     { SELF_INSERT,        0, 0,    (char *) 0 },
  740.     { SELF_INSERT,        0, 0,    (char *) 0 },
  741.     { SELF_INSERT,        0, 0,    (char *) 0 },
  742.     { SELF_INSERT,        0, 0,    (char *) 0 },
  743.     { SELF_INSERT,        0, 0,    (char *) 0 },
  744.  
  745.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 112 */
  746.     { SELF_INSERT,        0, 0,    (char *) 0 },
  747.     { SELF_INSERT,        0, 0,    (char *) 0 },
  748.     { SELF_INSERT,        0, 0,    (char *) 0 },
  749.     { SELF_INSERT,        0, 0,    (char *) 0 },
  750.     { SELF_INSERT,        0, 0,    (char *) 0 },
  751.     { SELF_INSERT,        0, 0,    (char *) 0 },
  752.     { SELF_INSERT,        0, 0,    (char *) 0 },
  753.  
  754.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 120 */
  755.     { SELF_INSERT,        0, 0,    (char *) 0 },
  756.     { SELF_INSERT,        0, 0,    (char *) 0 },
  757.     { SELF_INSERT,        0, 0,    (char *) 0 },
  758.     { SELF_INSERT,        0, 0,    (char *) 0 },
  759.     { SELF_INSERT,        0, 0,    (char *) 0 },
  760.     { SELF_INSERT,        0, 0,    (char *) 0 },
  761.     { BACKSPACE,        0, 0,    (char *) 0 },
  762.  
  763.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 128 */
  764.     { SELF_INSERT,        0, 0,    (char *) 0 },
  765.     { SELF_INSERT,        0, 0,    (char *) 0 },
  766.     { SELF_INSERT,        0, 0,    (char *) 0 },
  767.     { SELF_INSERT,        0, 0,    (char *) 0 },
  768.     { SELF_INSERT,        0, 0,    (char *) 0 },
  769.     { SELF_INSERT,        0, 0,    (char *) 0 },
  770.     { SELF_INSERT,        0, 0,    (char *) 0 },
  771.  
  772.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 136 */
  773.     { SELF_INSERT,        0, 0,    (char *) 0 },
  774.     { SELF_INSERT,        0, 0,    (char *) 0 },
  775.     { SELF_INSERT,        0, 0,    (char *) 0 },
  776.     { SELF_INSERT,        0, 0,    (char *) 0 },
  777.     { SELF_INSERT,        0, 0,    (char *) 0 },
  778.     { SELF_INSERT,        0, 0,    (char *) 0 },
  779.     { SELF_INSERT,        0, 0,    (char *) 0 },
  780.  
  781.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 144 */
  782.     { SELF_INSERT,        0, 0,    (char *) 0 },
  783.     { SELF_INSERT,        0, 0,    (char *) 0 },
  784.     { SELF_INSERT,        0, 0,    (char *) 0 },
  785.     { SELF_INSERT,        0, 0,    (char *) 0 },
  786.     { SELF_INSERT,        0, 0,    (char *) 0 },
  787.     { SELF_INSERT,        0, 0,    (char *) 0 },
  788.     { SELF_INSERT,        0, 0,    (char *) 0 },
  789.  
  790.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 152 */
  791.     { SELF_INSERT,        0, 0,    (char *) 0 },
  792.     { SELF_INSERT,        0, 0,    (char *) 0 },
  793.     { SELF_INSERT,        0, 0,    (char *) 0 },
  794.     { SELF_INSERT,        0, 0,    (char *) 0 },
  795.     { SELF_INSERT,        0, 0,    (char *) 0 },
  796.     { SELF_INSERT,        0, 0,    (char *) 0 },
  797.     { SELF_INSERT,        0, 0,    (char *) 0 },
  798.  
  799.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 160 */
  800.     { SELF_INSERT,        0, 0,    (char *) 0 },
  801.     { SELF_INSERT,        0, 0,    (char *) 0 },
  802.     { SELF_INSERT,        0, 0,    (char *) 0 },
  803.     { SELF_INSERT,        0, 0,    (char *) 0 },
  804.     { SELF_INSERT,        0, 0,    (char *) 0 },
  805.     { SELF_INSERT,        0, 0,    (char *) 0 },
  806.     { SELF_INSERT,        0, 0,    (char *) 0 },
  807.  
  808.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 168 */
  809.     { SELF_INSERT,        0, 0,    (char *) 0 },
  810.     { SELF_INSERT,        0, 0,    (char *) 0 },
  811.     { SELF_INSERT,        0, 0,    (char *) 0 },
  812.     { SELF_INSERT,        0, 0,    (char *) 0 },
  813.     { SELF_INSERT,        0, 0,    (char *) 0 },
  814.     { SELF_INSERT,        0, 0,    (char *) 0 },
  815.     { SELF_INSERT,        0, 0,    (char *) 0 },
  816.  
  817.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 176 */
  818.     { SELF_INSERT,        0, 0,    (char *) 0 },
  819.     { SELF_INSERT,        0, 0,    (char *) 0 },
  820.     { SELF_INSERT,        0, 0,    (char *) 0 },
  821.     { SELF_INSERT,        0, 0,    (char *) 0 },
  822.     { SELF_INSERT,        0, 0,    (char *) 0 },
  823.     { SELF_INSERT,        0, 0,    (char *) 0 },
  824.     { SELF_INSERT,        0, 0,    (char *) 0 },
  825.  
  826.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 184 */
  827.     { SELF_INSERT,        0, 0,    (char *) 0 },
  828.     { SELF_INSERT,        0, 0,    (char *) 0 },
  829.     { SELF_INSERT,        0, 0,    (char *) 0 },
  830.     { SELF_INSERT,        0, 0,    (char *) 0 },
  831. /*    { SCROLL_START,        0, 0,    (char *) 0 }, */
  832.     { SELF_INSERT,        0, 0,    (char *) 0 },
  833.     { SELF_INSERT,        0, 0,    (char *) 0 },
  834. /*    { SCROLL_END,        0, 0,    (char *) 0 }, */
  835.     { SELF_INSERT,        0, 0,    (char *) 0 },
  836.  
  837.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 192 */
  838.     { SELF_INSERT,        0, 0,    (char *) 0 },
  839.     { SELF_INSERT,        0, 0,    (char *) 0 },
  840.     { SELF_INSERT,        0, 0,    (char *) 0 },
  841.     { SELF_INSERT,        0, 0,    (char *) 0 },
  842.     { SELF_INSERT,        0, 0,    (char *) 0 },
  843.     { SELF_INSERT,        0, 0,    (char *) 0 },
  844.     { SELF_INSERT,        0, 0,    (char *) 0 },
  845.  
  846.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 200 */
  847.     { SELF_INSERT,        0, 0,    (char *) 0 },
  848.     { SELF_INSERT,        0, 0,    (char *) 0 },
  849.     { SELF_INSERT,        0, 0,    (char *) 0 },
  850.     { SELF_INSERT,        0, 0,    (char *) 0 },
  851.     { SELF_INSERT,        0, 0,    (char *) 0 },
  852.     { SELF_INSERT,        0, 0,    (char *) 0 },
  853.     { SELF_INSERT,        0, 0,    (char *) 0 },
  854.  
  855.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 208 */
  856.     { SELF_INSERT,        0, 0,    (char *) 0 },
  857.     { SELF_INSERT,        0, 0,    (char *) 0 },
  858.     { SELF_INSERT,        0, 0,    (char *) 0 },
  859.     { SELF_INSERT,        0, 0,    (char *) 0 },
  860.     { SELF_INSERT,        0, 0,    (char *) 0 },
  861.     { SELF_INSERT,        0, 0,    (char *) 0 },
  862.     { SELF_INSERT,        0, 0,    (char *) 0 },
  863.  
  864.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 216 */
  865.     { SELF_INSERT,        0, 0,    (char *) 0 },
  866.     { SELF_INSERT,        0, 0,    (char *) 0 },
  867.     { SELF_INSERT,        0, 0,    (char *) 0 },
  868.     { SELF_INSERT,        0, 0,    (char *) 0 },
  869.     { SELF_INSERT,        0, 0,    (char *) 0 },
  870.     { SELF_INSERT,        0, 0,    (char *) 0 },
  871.     { SELF_INSERT,        0, 0,    (char *) 0 },
  872.  
  873.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 224 */
  874.     { SELF_INSERT,        0, 0,    (char *) 0 },
  875.     { SELF_INSERT,        0, 0,    (char *) 0 },
  876. /*    { BACKWARD_WORD,    0, 0,    (char *) 0 }, */
  877.     { SELF_INSERT,        0, 0,    (char *) 0 },
  878.     { SELF_INSERT,        0, 0,    (char *) 0 },
  879. /*    { DELETE_NEXT_WORD,    0, 0,    (char *) 0 }, */
  880.     { SELF_INSERT,        0, 0,    (char *) 0 },
  881. /*    { SCROLL_END,        0, 0,    (char *) 0 }, */
  882.     { SELF_INSERT,        0, 0,    (char *) 0 },
  883. /*    { FORWARD_WORD,        0, 0,    (char *) 0 }, */
  884.     { SELF_INSERT,        0, 0,    (char *) 0 },
  885.  
  886. /*    { DELETE_PREVIOUS_WORD,    0, 0,    (char *) 0 }, */
  887.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 232 */
  888.     { SELF_INSERT,        0, 0,    (char *) 0 },
  889.     { SELF_INSERT,        0, 0,    (char *) 0 },
  890.     { SELF_INSERT,        0, 0,    (char *) 0 },
  891.     { SELF_INSERT,        0, 0,    (char *) 0 },
  892.     { SELF_INSERT,        0, 0,    (char *) 0 },
  893.     { SELF_INSERT,        0, 0,    (char *) 0 },
  894.     { SELF_INSERT,        0, 0,    (char *) 0 },
  895.  
  896.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 240 */
  897.     { SELF_INSERT,        0, 0,    (char *) 0 },
  898.     { SELF_INSERT,        0, 0,    (char *) 0 },
  899.     { SELF_INSERT,        0, 0,    (char *) 0 },
  900.     { SELF_INSERT,        0, 0,    (char *) 0 },
  901.     { SELF_INSERT,        0, 0,    (char *) 0 },
  902.     { SELF_INSERT,        0, 0,    (char *) 0 },
  903.     { SELF_INSERT,        0, 0,    (char *) 0 },
  904.  
  905.     { SELF_INSERT,        0, 0,    (char *) 0 },    /* 248 */
  906.     { SELF_INSERT,        0, 0,    (char *) 0 },
  907.     { SELF_INSERT,        0, 0,    (char *) 0 },
  908.     { SELF_INSERT,        0, 0,    (char *) 0 },
  909.     { SELF_INSERT,        0, 0,    (char *) 0 },
  910.     { SELF_INSERT,        0, 0,    (char *) 0 },
  911.     { SELF_INSERT,        0, 0,    (char *) 0 },
  912.     { SELF_INSERT,        0, 0,    (char *) 0 }
  913. /*    { DELETE_PREVIOUS_WORD,    0, 0,    (char *) 0 } */
  914. };
  915.  
  916.  
  917. KeyMap    FAR meta1_keys[] =
  918. {
  919.     { NOTHING,        0, 0,    (char *) 0 },    /* 0 */
  920.     { NOTHING,        0, 0,    (char *) 0 },
  921.     { NOTHING,        0, 0,    (char *) 0 },
  922.     { NOTHING,        0, 0,    (char *) 0 },
  923.     { NOTHING,        0, 0,    (char *) 0 },
  924.     { NOTHING,        0, 0,    (char *) 0 },
  925.     { NOTHING,        0, 0,    (char *) 0 },
  926.     { NOTHING,        0, 0,    (char *) 0 },
  927.     
  928.     { NOTHING,        0, 0,    (char *) 0 },    /* 8 */
  929.     { NOTHING,        0, 0,    (char *) 0 },
  930.     { NOTHING,        0, 0,    (char *) 0 },
  931.     { NOTHING,        0, 0,    (char *) 0 },
  932.     { NOTHING,        0, 0,    (char *) 0 },
  933.     { NOTHING,        0, 0,    (char *) 0 },
  934.     { NOTHING,        0, 0,    (char *) 0 },
  935.     { NOTHING,        0, 0,    (char *) 0 },
  936.  
  937.     { NOTHING,        0, 0,    (char *) 0 },    /* 16 */
  938.     { NOTHING,        0, 0,    (char *) 0 },
  939.     { NOTHING,        0, 0,    (char *) 0 },
  940.     { NOTHING,        0, 0,    (char *) 0 },
  941.     { NOTHING,        0, 0,    (char *) 0 },
  942.     { NOTHING,        0, 0,    (char *) 0 },
  943.     { NOTHING,        0, 0,    (char *) 0 },
  944.     { NOTHING,        0, 0,    (char *) 0 },
  945.  
  946.     { NOTHING,        0, 0,    (char *) 0 },    /* 24 */
  947.     { NOTHING,        0, 0,    (char *) 0 },
  948.     { NOTHING,        0, 0,    (char *) 0 },
  949.     { COMMAND_COMPLETION,    0, 0,    (char *) 0 },
  950.     { NOTHING,        0, 0,    (char *) 0 },
  951.     { NOTHING,        0, 0,    (char *) 0 },
  952.     { NOTHING,        0, 0,    (char *) 0 },
  953.     { NOTHING,        0, 0,    (char *) 0 },
  954.  
  955.     { NOTHING,        0, 0,    (char *) 0 },    /* 32 */
  956.     { NOTHING,        0, 0,    (char *) 0 },
  957.     { NOTHING,        0, 0,    (char *) 0 },
  958.     { NOTHING,        0, 0,    (char *) 0 },
  959.     { NOTHING,        0, 0,    (char *) 0 },
  960.     { NOTHING,        0, 0,    (char *) 0 },
  961.     { NOTHING,        0, 0,    (char *) 0 },
  962.     { NOTHING,        0, 0,    (char *) 0 },
  963.  
  964.     { NOTHING,        0, 0,    (char *) 0 },    /* 40 */
  965.     { NOTHING,        0, 0,    (char *) 0 },
  966.     { NOTHING,        0, 0,    (char *) 0 },
  967.     { NOTHING,        0, 0,    (char *) 0 },
  968.     { NOTHING,        0, 0,    (char *) 0 },
  969.     { NOTHING,        0, 0,    (char *) 0 },
  970.     { CLEAR_SCREEN,        0, 0,    (char *) 0 },
  971.     { NOTHING,        0, 0,    (char *) 0 },
  972.  
  973.     { NOTHING,        0, 0,    (char *) 0 },    /* 48 */
  974.     { NOTHING,        0, 0,    (char *) 0 },
  975.     { NOTHING,        0, 0,    (char *) 0 },
  976.     { NOTHING,        0, 0,    (char *) 0 },
  977.     { NOTHING,        0, 0,    (char *) 0 },
  978.     { NOTHING,        0, 0,    (char *) 0 },
  979.     { NOTHING,        0, 0,    (char *) 0 },
  980.     { NOTHING,        0, 0,    (char *) 0 },
  981.  
  982.     { NOTHING,        0, 0,    (char *) 0 },    /* 56 */
  983.     { NOTHING,        0, 0,    (char *) 0 },
  984.     { NOTHING,        0, 0,    (char *) 0 },
  985.     { NOTHING,        0, 0,    (char *) 0 },
  986.     { SCROLL_START,        0, 0,    (char *) 0 },
  987.     { NOTHING,        0, 0,    (char *) 0 },
  988.     { SCROLL_END,        0, 0,    (char *) 0 },
  989.     { NOTHING,        0, 0,    (char *) 0 },
  990.  
  991.     { NOTHING,        0, 0,    (char *) 0 },    /* 64 */
  992.     { NOTHING,        0, 0,    (char *) 0 },
  993.     { NOTHING,        0, 0,    (char *) 0 },
  994.     { NOTHING,        0, 0,    (char *) 0 },
  995.     { NOTHING,        0, 0,    (char *) 0 },
  996.     { NOTHING,        0, 0,    (char *) 0 },
  997.     { NOTHING,        0, 0,    (char *) 0 },
  998.     { NOTHING,        0, 0,    (char *) 0 },
  999.  
  1000.     { NOTHING,        0, 0,    (char *) 0 },    /* 72 */
  1001.     { NOTHING,        0, 0,    (char *) 0 },
  1002.     { NOTHING,        0, 0,    (char *) 0 },
  1003.     { NOTHING,        0, 0,    (char *) 0 },
  1004.     { NOTHING,        0, 0,    (char *) 0 },
  1005.     { NOTHING,        0, 0,    (char *) 0 },
  1006.     { NOTHING,        0, 0,    (char *) 0 },
  1007.     { NOTHING,        0, 0,    (char *) 0 },
  1008.  
  1009.     { NOTHING,        0, 0,    (char *) 0 },    /* 80 */
  1010.     { NOTHING,        0, 0,    (char *) 0 },
  1011.     { NOTHING,        0, 0,    (char *) 0 },
  1012.     { NOTHING,        0, 0,    (char *) 0 },
  1013.     { NOTHING,        0, 0,    (char *) 0 },
  1014.     { NOTHING,        0, 0,    (char *) 0 },
  1015.     { NOTHING,        0, 0,    (char *) 0 },
  1016.     { NOTHING,        0, 0,    (char *) 0 },
  1017.  
  1018.     { NOTHING,        0, 0,    (char *) 0 },    /* 88 */
  1019.     { NOTHING,        0, 0,    (char *) 0 },
  1020.     { NOTHING,        0, 0,    (char *) 0 },
  1021.     { META3_CHARACTER,    0, 0,    (char *) 0 },
  1022.     { NOTHING,        0, 0,    (char *) 0 },
  1023.     { NOTHING,        0, 0,    (char *) 0 },
  1024.     { NOTHING,        0, 0,    (char *) 0 },
  1025.     { NOTHING,        0, 0,    (char *) 0 },
  1026.  
  1027.     { NOTHING,        0, 0,    (char *) 0 },    /* 96 */
  1028.     { NOTHING,        0, 0,    (char *) 0 },
  1029.     { BACKWARD_WORD,    0, 0,    (char *) 0 },
  1030.     { NOTHING,        0, 0,    (char *) 0 },
  1031.     { DELETE_NEXT_WORD,    0, 0,    (char *) 0 },
  1032.     { SCROLL_END,        0, 0,    (char *) 0 },
  1033.     { FORWARD_WORD,        0, 0,    (char *) 0 },
  1034.     { NOTHING,        0, 0,    (char *) 0 },
  1035.  
  1036.     { DELETE_PREVIOUS_WORD,    0, 0,    (char *) 0 },    /* 104 */
  1037.     { NOTHING,        0, 0,    (char *) 0 },
  1038.     { NOTHING,        0, 0,    (char *) 0 },
  1039.     { NOTHING,        0, 0,    (char *) 0 },
  1040.     { NOTHING,        0, 0,    (char *) 0 },
  1041.     { NOTHING,        0, 0,    (char *) 0 },
  1042.     { SCROLL_FORWARD,    0, 0,    (char *) 0 },
  1043.     { NOTHING,        0, 0,    (char *) 0 },
  1044.  
  1045.     { SCROLL_BACKWARD,    0, 0,    (char *) 0 },    /* 112 */
  1046.     { NOTHING,        0, 0,    (char *) 0 },
  1047.     { NOTHING,        0, 0,    (char *) 0 },
  1048.     { NOTHING,        0, 0,    (char *) 0 },
  1049.     { NOTHING,        0, 0,    (char *) 0 },
  1050.     { NOTHING,        0, 0,    (char *) 0 },
  1051.     { NOTHING,        0, 0,    (char *) 0 },
  1052.     { NOTHING,        0, 0,    (char *) 0 },
  1053.  
  1054.     { NOTHING,        0, 0,    (char *) 0 },    /* 120 */
  1055.     { NOTHING,        0, 0,    (char *) 0 },
  1056.     { NOTHING,        0, 0,    (char *) 0 },
  1057.     { NOTHING,        0, 0,    (char *) 0 },
  1058.     { NOTHING,        0, 0,    (char *) 0 },
  1059.     { NOTHING,        0, 0,    (char *) 0 },
  1060.     { NOTHING,        0, 0,    (char *) 0 },
  1061.     { DELETE_PREVIOUS_WORD,    0, 0,    (char *) 0 },
  1062.  
  1063.     { NOTHING,        0, 0,    (char *) 0 },    /* 128 */
  1064.     { NOTHING,        0, 0,    (char *) 0 },
  1065.     { NOTHING,        0, 0,    (char *) 0 },
  1066.     { NOTHING,        0, 0,    (char *) 0 },
  1067.     { NOTHING,        0, 0,    (char *) 0 },
  1068.     { NOTHING,        0, 0,    (char *) 0 },
  1069.     { NOTHING,        0, 0,    (char *) 0 },
  1070.     { NOTHING,        0, 0,    (char *) 0 },
  1071.  
  1072.     { NOTHING,        0, 0,    (char *) 0 },    /* 136 */
  1073.     { NOTHING,        0, 0,    (char *) 0 },
  1074.     { NOTHING,        0, 0,    (char *) 0 },
  1075.     { NOTHING,        0, 0,    (char *) 0 },
  1076.     { NOTHING,        0, 0,    (char *) 0 },
  1077.     { NOTHING,        0, 0,    (char *) 0 },
  1078.     { NOTHING,        0, 0,    (char *) 0 },
  1079.     { NOTHING,        0, 0,    (char *) 0 },
  1080.  
  1081.     { NOTHING,        0, 0,    (char *) 0 },    /* 144 */
  1082.     { NOTHING,        0, 0,    (char *) 0 },
  1083.     { NOTHING,        0, 0,    (char *) 0 },
  1084.     { NOTHING,        0, 0,    (char *) 0 },
  1085.     { NOTHING,        0, 0,    (char *) 0 },
  1086.     { NOTHING,        0, 0,    (char *) 0 },
  1087.     { NOTHING,        0, 0,    (char *) 0 },
  1088.     { NOTHING,        0, 0,    (char *) 0 },
  1089.  
  1090.     { NOTHING,        0, 0,    (char *) 0 },    /* 152 */
  1091.     { NOTHING,        0, 0,    (char *) 0 },
  1092.     { NOTHING,        0, 0,    (char *) 0 },
  1093.     { NOTHING,        0, 0,    (char *) 0 },
  1094.     { NOTHING,        0, 0,    (char *) 0 },
  1095.     { NOTHING,        0, 0,    (char *) 0 },
  1096.     { NOTHING,        0, 0,    (char *) 0 },
  1097.     { NOTHING,        0, 0,    (char *) 0 },
  1098.  
  1099.     { NOTHING,        0, 0,    (char *) 0 },    /* 160 */
  1100.     { NOTHING,        0, 0,    (char *) 0 },
  1101.     { NOTHING,        0, 0,    (char *) 0 },
  1102.     { NOTHING,        0, 0,    (char *) 0 },
  1103.     { NOTHING,        0, 0,    (char *) 0 },
  1104.     { NOTHING,        0, 0,    (char *) 0 },
  1105.     { NOTHING,        0, 0,    (char *) 0 },
  1106.     { NOTHING,        0, 0,    (char *) 0 },
  1107.  
  1108.     { NOTHING,        0, 0,    (char *) 0 },    /* 168 */
  1109.     { NOTHING,        0, 0,    (char *) 0 },
  1110.     { NOTHING,        0, 0,    (char *) 0 },
  1111.     { NOTHING,        0, 0,    (char *) 0 },
  1112.     { NOTHING,        0, 0,    (char *) 0 },
  1113.     { NOTHING,        0, 0,    (char *) 0 },
  1114.     { NOTHING,        0, 0,    (char *) 0 },
  1115.     { NOTHING,        0, 0,    (char *) 0 },
  1116.  
  1117.     { NOTHING,        0, 0,    (char *) 0 },    /* 176 */
  1118.     { NOTHING,        0, 0,    (char *) 0 },
  1119.     { NOTHING,        0, 0,    (char *) 0 },
  1120.     { NOTHING,        0, 0,    (char *) 0 },
  1121.     { NOTHING,        0, 0,    (char *) 0 },
  1122.     { NOTHING,        0, 0,    (char *) 0 },
  1123.     { NOTHING,        0, 0,    (char *) 0 },
  1124.     { NOTHING,        0, 0,    (char *) 0 },
  1125.  
  1126.     { NOTHING,        0, 0,    (char *) 0 },    /* 184 */
  1127.     { NOTHING,        0, 0,    (char *) 0 },
  1128.     { NOTHING,        0, 0,    (char *) 0 },
  1129.     { NOTHING,        0, 0,    (char *) 0 },
  1130.     { NOTHING,        0, 0,    (char *) 0 },
  1131.     { NOTHING,        0, 0,    (char *) 0 },
  1132.     { NOTHING,        0, 0,    (char *) 0 },
  1133.     { NOTHING,        0, 0,    (char *) 0 },
  1134.  
  1135.     { NOTHING,        0, 0,    (char *) 0 },    /* 192 */
  1136.     { NOTHING,        0, 0,    (char *) 0 },
  1137.     { NOTHING,        0, 0,    (char *) 0 },
  1138.     { NOTHING,        0, 0,    (char *) 0 },
  1139.     { NOTHING,        0, 0,    (char *) 0 },
  1140.     { NOTHING,        0, 0,    (char *) 0 },
  1141.     { NOTHING,        0, 0,    (char *) 0 },
  1142.     { NOTHING,        0, 0,    (char *) 0 },
  1143.  
  1144.     { NOTHING,        0, 0,    (char *) 0 },    /* 200 */
  1145.     { NOTHING,        0, 0,    (char *) 0 },
  1146.     { NOTHING,        0, 0,    (char *) 0 },
  1147.     { NOTHING,        0, 0,    (char *) 0 },
  1148.     { NOTHING,        0, 0,    (char *) 0 },
  1149.     { NOTHING,        0, 0,    (char *) 0 },
  1150.     { NOTHING,        0, 0,    (char *) 0 },
  1151.     { NOTHING,        0, 0,    (char *) 0 },
  1152.  
  1153.     { NOTHING,        0, 0,    (char *) 0 },    /* 208 */
  1154.     { NOTHING,        0, 0,    (char *) 0 },
  1155.     { NOTHING,        0, 0,    (char *) 0 },
  1156.     { NOTHING,        0, 0,    (char *) 0 },
  1157.     { NOTHING,        0, 0,    (char *) 0 },
  1158.     { NOTHING,        0, 0,    (char *) 0 },
  1159.     { NOTHING,        0, 0,    (char *) 0 },
  1160.     { NOTHING,        0, 0,    (char *) 0 },
  1161.  
  1162.     { NOTHING,        0, 0,    (char *) 0 },    /* 216 */
  1163.     { NOTHING,        0, 0,    (char *) 0 },
  1164.     { NOTHING,        0, 0,    (char *) 0 },
  1165.     { NOTHING,        0, 0,    (char *) 0 },
  1166.     { NOTHING,        0, 0,    (char *) 0 },
  1167.     { NOTHING,        0, 0,    (char *) 0 },
  1168.     { NOTHING,        0, 0,    (char *) 0 },
  1169.     { NOTHING,        0, 0,    (char *) 0 },
  1170.  
  1171.     { NOTHING,        0, 0,    (char *) 0 },    /* 224 */
  1172.     { NOTHING,        0, 0,    (char *) 0 },
  1173.     { NOTHING,        0, 0,    (char *) 0 },
  1174.     { NOTHING,        0, 0,    (char *) 0 },
  1175.     { NOTHING,        0, 0,    (char *) 0 },
  1176.     { NOTHING,        0, 0,    (char *) 0 },
  1177.     { NOTHING,        0, 0,    (char *) 0 },
  1178.     { NOTHING,        0, 0,    (char *) 0 },
  1179.  
  1180.     { NOTHING,        0, 0,    (char *) 0 },    /* 232 */
  1181.     { NOTHING,        0, 0,    (char *) 0 },
  1182.     { NOTHING,        0, 0,    (char *) 0 },
  1183.     { NOTHING,        0, 0,    (char *) 0 },
  1184.     { NOTHING,        0, 0,    (char *) 0 },
  1185.     { NOTHING,        0, 0,    (char *) 0 },
  1186.     { NOTHING,        0, 0,    (char *) 0 },
  1187.     { NOTHING,        0, 0,    (char *) 0 },
  1188.  
  1189.     { NOTHING,        0, 0,    (char *) 0 },    /* 240 */
  1190.     { NOTHING,        0, 0,    (char *) 0 },
  1191.     { NOTHING,        0, 0,    (char *) 0 },
  1192.     { NOTHING,        0, 0,    (char *) 0 },
  1193.     { NOTHING,        0, 0,    (char *) 0 },
  1194.     { NOTHING,        0, 0,    (char *) 0 },
  1195.     { NOTHING,        0, 0,    (char *) 0 },
  1196.     { NOTHING,        0, 0,    (char *) 0 },
  1197.  
  1198.     { NOTHING,        0, 0,    (char *) 0 },    /* 248 */
  1199.     { NOTHING,        0, 0,    (char *) 0 },
  1200.     { NOTHING,        0, 0,    (char *) 0 },
  1201.     { NOTHING,        0, 0,    (char *) 0 },
  1202.     { NOTHING,        0, 0,    (char *) 0 },
  1203.     { NOTHING,        0, 0,    (char *) 0 },
  1204.     { NOTHING,        0, 0,    (char *) 0 },
  1205.     { NOTHING,        0, 0,    (char *) 0 }
  1206. };
  1207.  
  1208. KeyMap    FAR meta2_keys[] =
  1209. {
  1210.     { NOTHING,        0, 0,    (char *) 0 },    /* 0 */
  1211.     { NOTHING,        0, 0,    (char *) 0 },
  1212.     { NOTHING,        0, 0,    (char *) 0 },
  1213.     { NOTHING,        0, 0,    (char *) 0 },
  1214.     { NOTHING,        0, 0,    (char *) 0 },
  1215.     { NOTHING,        0, 0,    (char *) 0 },
  1216.     { NOTHING,        0, 0,    (char *) 0 },
  1217.     { NOTHING,        0, 0,    (char *) 0 },
  1218.  
  1219.     { NOTHING,        0, 0,    (char *) 0 },    /* 8 */
  1220.     { NOTHING,        0, 0,    (char *) 0 },
  1221.     { NOTHING,        0, 0,    (char *) 0 },
  1222.     { NOTHING,        0, 0,    (char *) 0 },
  1223.     { NOTHING,        0, 0,    (char *) 0 },
  1224.     { NOTHING,        0, 0,    (char *) 0 },
  1225.     { NOTHING,        0, 0,    (char *) 0 },
  1226.     { NOTHING,        0, 0,    (char *) 0 },
  1227.  
  1228.     { NOTHING,        0, 0,    (char *) 0 },    /* 16 */
  1229.     { NOTHING,        0, 0,    (char *) 0 },
  1230.     { NOTHING,        0, 0,    (char *) 0 },
  1231.     { NOTHING,        0, 0,    (char *) 0 },
  1232.     { NOTHING,        0, 0,    (char *) 0 },
  1233.     { NOTHING,        0, 0,    (char *) 0 },
  1234.     { NOTHING,        0, 0,    (char *) 0 },
  1235.     { NOTHING,        0, 0,    (char *) 0 },
  1236.  
  1237.     { NOTHING,        0, 0,    (char *) 0 },    /* 24 */
  1238.     { NOTHING,        0, 0,    (char *) 0 },
  1239. #ifdef ALLOW_STOP_IRC
  1240.     { STOP_IRC,        0, 0,    (char *) 0 },
  1241. #else
  1242.     { NOTHING,        0, 0,    (char *) 0 },
  1243. #endif
  1244.     { NOTHING,        0, 0,    (char *) 0 },
  1245.     { NOTHING,        0, 0,    (char *) 0 },
  1246.     { NOTHING,        0, 0,    (char *) 0 },
  1247.     { NOTHING,        0, 0,    (char *) 0 },
  1248.     { NOTHING,        0, 0,    (char *) 0 },
  1249.  
  1250.     { NOTHING,        0, 0,    (char *) 0 },    /* 32 */
  1251.     { NOTHING,        0, 0,    (char *) 0 },
  1252.     { NOTHING,        0, 0,    (char *) 0 },
  1253.     { NOTHING,        0, 0,    (char *) 0 },
  1254.     { NOTHING,        0, 0,    (char *) 0 },
  1255.     { NOTHING,        0, 0,    (char *) 0 },
  1256.     { NOTHING,        0, 0,    (char *) 0 },
  1257.     { NOTHING,        0, 0,    (char *) 0 },
  1258.  
  1259.     { NOTHING,        0, 0,    (char *) 0 },    /* 40 */
  1260.     { NOTHING,        0, 0,    (char *) 0 },
  1261.     { NOTHING,        0, 0,    (char *) 0 },
  1262.     { NOTHING,        0, 0,    (char *) 0 },
  1263.     { NOTHING,        0, 0,    (char *) 0 },
  1264.     { NOTHING,        0, 0,    (char *) 0 },
  1265.     { NOTHING,        0, 0,    (char *) 0 },
  1266.     { NOTHING,        0, 0,    (char *) 0 },
  1267.  
  1268.     { NOTHING,        0, 0,    (char *) 0 },    /* 48 */
  1269.     { NOTHING,        0, 0,    (char *) 0 },
  1270.     { NOTHING,        0, 0,    (char *) 0 },
  1271.     { NOTHING,        0, 0,    (char *) 0 },
  1272.     { NOTHING,        0, 0,    (char *) 0 },
  1273.     { NOTHING,        0, 0,    (char *) 0 },
  1274.     { NOTHING,        0, 0,    (char *) 0 },
  1275.     { NOTHING,        0, 0,    (char *) 0 },
  1276.  
  1277.     { NOTHING,        0, 0,    (char *) 0 },    /* 56 */
  1278.     { NOTHING,        0, 0,    (char *) 0 },
  1279.     { NOTHING,        0, 0,    (char *) 0 },
  1280.     { NOTHING,        0, 0,    (char *) 0 },
  1281.     { NOTHING,        0, 0,    (char *) 0 },
  1282.     { NOTHING,        0, 0,    (char *) 0 },
  1283.     { NOTHING,        0, 0,    (char *) 0 },
  1284.     { NOTHING,        0, 0,    (char *) 0 },
  1285.  
  1286.     { NOTHING,        0, 0,    (char *) 0 },    /* 64 */
  1287.     { NOTHING,        0, 0,    (char *) 0 },
  1288.     { NOTHING,        0, 0,    (char *) 0 },
  1289.     { NOTHING,        0, 0,    (char *) 0 },
  1290.     { NOTHING,        0, 0,    (char *) 0 },
  1291.     { NOTHING,        0, 0,    (char *) 0 },
  1292.     { NOTHING,        0, 0,    (char *) 0 },
  1293.     { NOTHING,        0, 0,    (char *) 0 },
  1294.  
  1295.     { NOTHING,        0, 0,    (char *) 0 },    /* 72 */
  1296.     { NOTHING,        0, 0,    (char *) 0 },
  1297.     { NOTHING,        0, 0,    (char *) 0 },
  1298.     { NOTHING,        0, 0,    (char *) 0 },
  1299.     { NOTHING,        0, 0,    (char *) 0 },
  1300.     { NOTHING,        0, 0,    (char *) 0 },
  1301.     { NOTHING,        0, 0,    (char *) 0 },
  1302.     { NOTHING,        0, 0,    (char *) 0 },
  1303.  
  1304.     { NOTHING,        0, 0,    (char *) 0 },    /* 80 */
  1305.     { NOTHING,        0, 0,    (char *) 0 },
  1306.     { NOTHING,        0, 0,    (char *) 0 },
  1307.     { NOTHING,        0, 0,    (char *) 0 },
  1308.     { NOTHING,        0, 0,    (char *) 0 },
  1309.     { NOTHING,        0, 0,    (char *) 0 },
  1310.     { NOTHING,        0, 0,    (char *) 0 },
  1311.     { NOTHING,        0, 0,    (char *) 0 },
  1312.  
  1313.     { NOTHING,        0, 0,    (char *) 0 },    /* 88 */
  1314.     { NOTHING,        0, 0,    (char *) 0 },
  1315.     { NOTHING,        0, 0,    (char *) 0 },
  1316.     { NOTHING,        0, 0,    (char *) 0 },
  1317.     { NOTHING,        0, 0,    (char *) 0 },
  1318.     { NOTHING,        0, 0,    (char *) 0 },
  1319.     { NOTHING,        0, 0,    (char *) 0 },
  1320.     { NOTHING,        0, 0,    (char *) 0 },
  1321.  
  1322.     { NOTHING,        0, 0,    (char *) 0 },    /* 96 */
  1323.     { NOTHING,        0, 0,    (char *) 0 },
  1324.     { NOTHING,        0, 0,    (char *) 0 },
  1325.     { NOTHING,        0, 0,    (char *) 0 },
  1326.     { NOTHING,        0, 0,    (char *) 0 },
  1327.     { NOTHING,        0, 0,    (char *) 0 },
  1328.     { NOTHING,        0, 0,    (char *) 0 },
  1329.     { NOTHING,        0, 0,    (char *) 0 },
  1330.  
  1331.     { NOTHING,        0, 0,    (char *) 0 },    /* 104 */
  1332.     { NOTHING,        0, 0,    (char *) 0 },
  1333.     { NOTHING,        0, 0,    (char *) 0 },
  1334.     { NOTHING,        0, 0,    (char *) 0 },
  1335.     { NOTHING,        0, 0,    (char *) 0 },
  1336.     { NOTHING,        0, 0,    (char *) 0 },
  1337.     { NEXT_WINDOW,        0, 0,    (char *) 0 },
  1338.     { NOTHING,        0, 0,    (char *) 0 },
  1339.  
  1340.     { PREVIOUS_WINDOW,    0, 0,    (char *) 0 },    /* 112 */
  1341.     { NOTHING,        0, 0,    (char *) 0 },
  1342.     { NOTHING,        0, 0,    (char *) 0 },
  1343.     { NOTHING,        0, 0,    (char *) 0 },
  1344.     { NOTHING,        0, 0,    (char *) 0 },
  1345.     { NOTHING,        0, 0,    (char *) 0 },
  1346.     { NOTHING,        0, 0,    (char *) 0 },
  1347.     { NOTHING,        0, 0,    (char *) 0 },
  1348.  
  1349.     { NOTHING,        0, 0,    (char *) 0 },    /* 120 */
  1350.     { NOTHING,        0, 0,    (char *) 0 },
  1351.     { NOTHING,        0, 0,    (char *) 0 },
  1352.     { NOTHING,        0, 0,    (char *) 0 },
  1353.     { NOTHING,        0, 0,    (char *) 0 },
  1354.     { NOTHING,        0, 0,    (char *) 0 },
  1355.     { NOTHING,        0, 0,    (char *) 0 },
  1356.     { NOTHING,        0, 0,    (char *) 0 },
  1357.  
  1358.     { NOTHING,        0, 0,    (char *) 0 },    /* 128 */
  1359.     { NOTHING,        0, 0,    (char *) 0 },
  1360.     { NOTHING,        0, 0,    (char *) 0 },
  1361.     { NOTHING,        0, 0,    (char *) 0 },
  1362.     { NOTHING,        0, 0,    (char *) 0 },
  1363.     { NOTHING,        0, 0,    (char *) 0 },
  1364.     { NOTHING,        0, 0,    (char *) 0 },
  1365.     { NOTHING,        0, 0,    (char *) 0 },
  1366.  
  1367.     { NOTHING,        0, 0,    (char *) 0 },    /* 136 */
  1368.     { NOTHING,        0, 0,    (char *) 0 },
  1369.     { NOTHING,        0, 0,    (char *) 0 },
  1370.     { NOTHING,        0, 0,    (char *) 0 },
  1371.     { NOTHING,        0, 0,    (char *) 0 },
  1372.     { NOTHING,        0, 0,    (char *) 0 },
  1373.     { NOTHING,        0, 0,    (char *) 0 },
  1374.     { NOTHING,        0, 0,    (char *) 0 },
  1375.  
  1376.     { NOTHING,        0, 0,    (char *) 0 },    /* 144 */
  1377.     { NOTHING,        0, 0,    (char *) 0 },
  1378.     { NOTHING,        0, 0,    (char *) 0 },
  1379.     { NOTHING,        0, 0,    (char *) 0 },
  1380.     { NOTHING,        0, 0,    (char *) 0 },
  1381.     { NOTHING,        0, 0,    (char *) 0 },
  1382.     { NOTHING,        0, 0,    (char *) 0 },
  1383.     { NOTHING,        0, 0,    (char *) 0 },
  1384.  
  1385.     { NOTHING,        0, 0,    (char *) 0 },    /* 152 */
  1386.     { NOTHING,        0, 0,    (char *) 0 },
  1387.     { NOTHING,        0, 0,    (char *) 0 },
  1388.     { NOTHING,        0, 0,    (char *) 0 },
  1389.     { NOTHING,        0, 0,    (char *) 0 },
  1390.     { NOTHING,        0, 0,    (char *) 0 },
  1391.     { NOTHING,        0, 0,    (char *) 0 },
  1392.     { NOTHING,        0, 0,    (char *) 0 },
  1393.  
  1394.     { NOTHING,        0, 0,    (char *) 0 },    /* 160 */
  1395.     { NOTHING,        0, 0,    (char *) 0 },
  1396.     { NOTHING,        0, 0,    (char *) 0 },
  1397.     { NOTHING,        0, 0,    (char *) 0 },
  1398.     { NOTHING,        0, 0,    (char *) 0 },
  1399.     { NOTHING,        0, 0,    (char *) 0 },
  1400.     { NOTHING,        0, 0,    (char *) 0 },
  1401.     { NOTHING,        0, 0,    (char *) 0 },
  1402.  
  1403.     { NOTHING,        0, 0,    (char *) 0 },    /* 168 */
  1404.     { NOTHING,        0, 0,    (char *) 0 },
  1405.     { NOTHING,        0, 0,    (char *) 0 },
  1406.     { NOTHING,        0, 0,    (char *) 0 },
  1407.     { NOTHING,        0, 0,    (char *) 0 },
  1408.     { NOTHING,        0, 0,    (char *) 0 },
  1409.     { NOTHING,        0, 0,    (char *) 0 },
  1410.     { NOTHING,        0, 0,    (char *) 0 },
  1411.  
  1412.     { NOTHING,        0, 0,    (char *) 0 },    /* 176 */
  1413.     { NOTHING,        0, 0,    (char *) 0 },
  1414.     { NOTHING,        0, 0,    (char *) 0 },
  1415.     { NOTHING,        0, 0,    (char *) 0 },
  1416.     { NOTHING,        0, 0,    (char *) 0 },
  1417.     { NOTHING,        0, 0,    (char *) 0 },
  1418.     { NOTHING,        0, 0,    (char *) 0 },
  1419.     { NOTHING,        0, 0,    (char *) 0 },
  1420.  
  1421.     { NOTHING,        0, 0,    (char *) 0 },    /* 184 */
  1422.     { NOTHING,        0, 0,    (char *) 0 },
  1423.     { NOTHING,        0, 0,    (char *) 0 },
  1424.     { NOTHING,        0, 0,    (char *) 0 },
  1425.     { NOTHING,        0, 0,    (char *) 0 },
  1426.     { NOTHING,        0, 0,    (char *) 0 },
  1427.     { NOTHING,        0, 0,    (char *) 0 },
  1428.     { NOTHING,        0, 0,    (char *) 0 },
  1429.  
  1430.     { NOTHING,        0, 0,    (char *) 0 },    /* 192 */
  1431.     { NOTHING,        0, 0,    (char *) 0 },
  1432.     { NOTHING,        0, 0,    (char *) 0 },
  1433.     { NOTHING,        0, 0,    (char *) 0 },
  1434.     { NOTHING,        0, 0,    (char *) 0 },
  1435.     { NOTHING,        0, 0,    (char *) 0 },
  1436.     { NOTHING,        0, 0,    (char *) 0 },
  1437.     { NOTHING,        0, 0,    (char *) 0 },
  1438.  
  1439.     { NOTHING,        0, 0,    (char *) 0 },    /* 200 */
  1440.     { NOTHING,        0, 0,    (char *) 0 },
  1441.     { NOTHING,        0, 0,    (char *) 0 },
  1442.     { NOTHING,        0, 0,    (char *) 0 },
  1443.     { NOTHING,        0, 0,    (char *) 0 },
  1444.     { NOTHING,        0, 0,    (char *) 0 },
  1445.     { NOTHING,        0, 0,    (char *) 0 },
  1446.     { NOTHING,        0, 0,    (char *) 0 },
  1447.  
  1448.     { NOTHING,        0, 0,    (char *) 0 },    /* 208 */
  1449.     { NOTHING,        0, 0,    (char *) 0 },
  1450.     { NOTHING,        0, 0,    (char *) 0 },
  1451.     { NOTHING,        0, 0,    (char *) 0 },
  1452.     { NOTHING,        0, 0,    (char *) 0 },
  1453.     { NOTHING,        0, 0,    (char *) 0 },
  1454.     { NOTHING,        0, 0,    (char *) 0 },
  1455.     { NOTHING,        0, 0,    (char *) 0 },
  1456.  
  1457.     { NOTHING,        0, 0,    (char *) 0 },    /* 216 */
  1458.     { NOTHING,        0, 0,    (char *) 0 },
  1459.     { NOTHING,        0, 0,    (char *) 0 },
  1460.     { NOTHING,        0, 0,    (char *) 0 },
  1461.     { NOTHING,        0, 0,    (char *) 0 },
  1462.     { NOTHING,        0, 0,    (char *) 0 },
  1463.     { NOTHING,        0, 0,    (char *) 0 },
  1464.     { NOTHING,        0, 0,    (char *) 0 },
  1465.  
  1466.     { NOTHING,        0, 0,    (char *) 0 },    /* 224 */
  1467.     { NOTHING,        0, 0,    (char *) 0 },
  1468.     { NOTHING,        0, 0,    (char *) 0 },
  1469.     { NOTHING,        0, 0,    (char *) 0 },
  1470.     { NOTHING,        0, 0,    (char *) 0 },
  1471.     { NOTHING,        0, 0,    (char *) 0 },
  1472.     { NOTHING,        0, 0,    (char *) 0 },
  1473.     { NOTHING,        0, 0,    (char *) 0 },
  1474.  
  1475.     { NOTHING,        0, 0,    (char *) 0 },    /* 232 */
  1476.     { NOTHING,        0, 0,    (char *) 0 },
  1477.     { NOTHING,        0, 0,    (char *) 0 },
  1478.     { NOTHING,        0, 0,    (char *) 0 },
  1479.     { NOTHING,        0, 0,    (char *) 0 },
  1480.     { NOTHING,        0, 0,    (char *) 0 },
  1481.     { NOTHING,        0, 0,    (char *) 0 },
  1482.     { NOTHING,        0, 0,    (char *) 0 },
  1483.  
  1484.     { NOTHING,        0, 0,    (char *) 0 },    /* 240 */
  1485.     { NOTHING,        0, 0,    (char *) 0 },
  1486.     { NOTHING,        0, 0,    (char *) 0 },
  1487.     { NOTHING,        0, 0,    (char *) 0 },
  1488.     { NOTHING,        0, 0,    (char *) 0 },
  1489.     { NOTHING,        0, 0,    (char *) 0 },
  1490.     { NOTHING,        0, 0,    (char *) 0 },
  1491.     { NOTHING,        0, 0,    (char *) 0 },
  1492.  
  1493.     { NOTHING,        0, 0,    (char *) 0 },    /* 248 */
  1494.     { NOTHING,        0, 0,    (char *) 0 },
  1495.     { NOTHING,        0, 0,    (char *) 0 },
  1496.     { NOTHING,        0, 0,    (char *) 0 },
  1497.     { NOTHING,        0, 0,    (char *) 0 },
  1498.     { NOTHING,        0, 0,    (char *) 0 },
  1499.     { NOTHING,        0, 0,    (char *) 0 },
  1500.     { NOTHING,        0, 0,    (char *) 0 }
  1501. };
  1502.  
  1503. KeyMap    FAR meta3_keys[] =
  1504. {
  1505.     { NOTHING,        0, 0,    (char *) 0 },    /* 0 */
  1506.     { NOTHING,        0, 0,    (char *) 0 },
  1507.     { NOTHING,        0, 0,    (char *) 0 },
  1508.     { NOTHING,        0, 0,    (char *) 0 },
  1509.     { NOTHING,        0, 0,    (char *) 0 },
  1510.     { NOTHING,        0, 0,    (char *) 0 },
  1511.     { NOTHING,        0, 0,    (char *) 0 },
  1512.     { NOTHING,        0, 0,    (char *) 0 },
  1513.  
  1514.     { NOTHING,        0, 0,    (char *) 0 },    /* 8 */
  1515.     { NOTHING,        0, 0,    (char *) 0 },
  1516.     { NOTHING,        0, 0,    (char *) 0 },
  1517.     { NOTHING,        0, 0,    (char *) 0 },
  1518.     { NOTHING,        0, 0,    (char *) 0 },
  1519.     { NOTHING,        0, 0,    (char *) 0 },
  1520.     { NOTHING,        0, 0,    (char *) 0 },
  1521.     { NOTHING,        0, 0,    (char *) 0 },
  1522.  
  1523.     { NOTHING,        0, 0,    (char *) 0 },    /* 16 */
  1524.     { NOTHING,        0, 0,    (char *) 0 },
  1525.     { NOTHING,        0, 0,    (char *) 0 },
  1526.     { NOTHING,        0, 0,    (char *) 0 },
  1527.     { NOTHING,        0, 0,    (char *) 0 },
  1528.     { NOTHING,        0, 0,    (char *) 0 },
  1529.     { NOTHING,        0, 0,    (char *) 0 },
  1530.     { NOTHING,        0, 0,    (char *) 0 },
  1531.  
  1532.     { NOTHING,        0, 0,    (char *) 0 },    /* 24 */
  1533.     { NOTHING,        0, 0,    (char *) 0 },
  1534.     { NOTHING,        0, 0,    (char *) 0 },
  1535.     { NOTHING,        0, 0,    (char *) 0 },
  1536.     { NOTHING,        0, 0,    (char *) 0 },
  1537.     { NOTHING,        0, 0,    (char *) 0 },
  1538.     { NOTHING,        0, 0,    (char *) 0 },
  1539.     { NOTHING,        0, 0,    (char *) 0 },
  1540.  
  1541.     { NOTHING,        0, 0,    (char *) 0 },    /* 32 */
  1542.     { NOTHING,        0, 0,    (char *) 0 },
  1543.     { NOTHING,        0, 0,    (char *) 0 },
  1544.     { NOTHING,        0, 0,    (char *) 0 },
  1545.     { NOTHING,        0, 0,    (char *) 0 },
  1546.     { NOTHING,        0, 0,    (char *) 0 },
  1547.     { NOTHING,        0, 0,    (char *) 0 },
  1548.     { NOTHING,        0, 0,    (char *) 0 },
  1549.  
  1550.     { NOTHING,        0, 0,    (char *) 0 },    /* 40 */
  1551.     { NOTHING,        0, 0,    (char *) 0 },
  1552.     { NOTHING,        0, 0,    (char *) 0 },
  1553.     { NOTHING,        0, 0,    (char *) 0 },
  1554.     { NOTHING,        0, 0,    (char *) 0 },
  1555.     { NOTHING,        0, 0,    (char *) 0 },
  1556.     { NOTHING,        0, 0,    (char *) 0 },
  1557.     { NOTHING,        0, 0,    (char *) 0 },
  1558.  
  1559.     { NOTHING,        0, 0,    (char *) 0 },    /* 48 */
  1560.     { NOTHING,        0, 0,    (char *) 0 },
  1561.     { NOTHING,        0, 0,    (char *) 0 },
  1562.     { NOTHING,        0, 0,    (char *) 0 },
  1563.     { NOTHING,        0, 0,    (char *) 0 },
  1564.     { NOTHING,        0, 0,    (char *) 0 },
  1565.     { NOTHING,        0, 0,    (char *) 0 },
  1566.     { NOTHING,        0, 0,    (char *) 0 },
  1567.  
  1568.     { NOTHING,        0, 0,    (char *) 0 },    /* 56 */
  1569.     { NOTHING,        0, 0,    (char *) 0 },
  1570.     { NOTHING,        0, 0,    (char *) 0 },
  1571.     { NOTHING,        0, 0,    (char *) 0 },
  1572.     { NOTHING,        0, 0,    (char *) 0 },
  1573.     { NOTHING,        0, 0,    (char *) 0 },
  1574.     { NOTHING,        0, 0,    (char *) 0 },
  1575.     { NOTHING,        0, 0,    (char *) 0 },
  1576.  
  1577.     { NOTHING,        0, 0,    (char *) 0 },    /* 64 */
  1578.     { NOTHING,        0, 0,    (char *) 0 },
  1579.     { NOTHING,        0, 0,    (char *) 0 },
  1580.     { NOTHING,        0, 0,    (char *) 0 },
  1581.     { NOTHING,        0, 0,    (char *) 0 },
  1582.     { NOTHING,        0, 0,    (char *) 0 },
  1583.     { NOTHING,        0, 0,    (char *) 0 },
  1584.     { NOTHING,        0, 0,    (char *) 0 },
  1585.  
  1586.     { NOTHING,        0, 0,    (char *) 0 },    /* 72 */
  1587.     { NOTHING,        0, 0,    (char *) 0 },
  1588.     { NOTHING,        0, 0,    (char *) 0 },
  1589.     { NOTHING,        0, 0,    (char *) 0 },
  1590.     { NOTHING,        0, 0,    (char *) 0 },
  1591.     { NOTHING,        0, 0,    (char *) 0 },
  1592.     { NOTHING,        0, 0,    (char *) 0 },
  1593.     { NOTHING,        0, 0,    (char *) 0 },
  1594.  
  1595.     { NOTHING,        0, 0,    (char *) 0 },    /* 80 */
  1596.     { NOTHING,        0, 0,    (char *) 0 },
  1597.     { NOTHING,        0, 0,    (char *) 0 },
  1598.     { NOTHING,        0, 0,    (char *) 0 },
  1599.     { NOTHING,        0, 0,    (char *) 0 },
  1600.     { NOTHING,        0, 0,    (char *) 0 },
  1601.     { NOTHING,        0, 0,    (char *) 0 },
  1602.     { NOTHING,        0, 0,    (char *) 0 },
  1603.  
  1604.     { NOTHING,        0, 0,    (char *) 0 },    /* 88 */
  1605.     { NOTHING,        0, 0,    (char *) 0 },
  1606.     { NOTHING,        0, 0,    (char *) 0 },
  1607.     { NOTHING,        0, 0,    (char *) 0 },
  1608.     { NOTHING,        0, 0,    (char *) 0 },
  1609.     { NOTHING,        0, 0,    (char *) 0 },
  1610.     { NOTHING,        0, 0,    (char *) 0 },
  1611.     { NOTHING,        0, 0,    (char *) 0 },
  1612.  
  1613.     { NOTHING,        0, 0,    (char *) 0 },    /* 96 */
  1614.     { NOTHING,        0, 0,    (char *) 0 },
  1615.     { NOTHING,        0, 0,    (char *) 0 },
  1616.     { NOTHING,        0, 0,    (char *) 0 },
  1617.     { NOTHING,        0, 0,    (char *) 0 },
  1618.     { NOTHING,        0, 0,    (char *) 0 },
  1619.     { NOTHING,        0, 0,    (char *) 0 },
  1620.     { NOTHING,        0, 0,    (char *) 0 },
  1621.  
  1622.     { NOTHING,        0, 0,    (char *) 0 },    /* 104 */
  1623.     { NOTHING,        0, 0,    (char *) 0 },
  1624.     { NOTHING,        0, 0,    (char *) 0 },
  1625.     { NOTHING,        0, 0,    (char *) 0 },
  1626.     { NOTHING,        0, 0,    (char *) 0 },
  1627.     { NOTHING,        0, 0,    (char *) 0 },
  1628.     { NOTHING,        0, 0,    (char *) 0 },
  1629.     { NOTHING,        0, 0,    (char *) 0 },
  1630.  
  1631.     { NOTHING,        0, 0,    (char *) 0 },    /* 112 */
  1632.     { NOTHING,        0, 0,    (char *) 0 },
  1633.     { NOTHING,        0, 0,    (char *) 0 },
  1634.     { NOTHING,        0, 0,    (char *) 0 },
  1635.     { NOTHING,        0, 0,    (char *) 0 },
  1636.     { NOTHING,        0, 0,    (char *) 0 },
  1637.     { NOTHING,        0, 0,    (char *) 0 },
  1638.     { NOTHING,        0, 0,    (char *) 0 },
  1639.  
  1640.     { NOTHING,        0, 0,    (char *) 0 },    /* 120 */
  1641.     { NOTHING,        0, 0,    (char *) 0 },
  1642.     { NOTHING,        0, 0,    (char *) 0 },
  1643.     { NOTHING,        0, 0,    (char *) 0 },
  1644.     { NOTHING,        0, 0,    (char *) 0 },
  1645.     { NOTHING,        0, 0,    (char *) 0 },
  1646.     { NOTHING,        0, 0,    (char *) 0 },
  1647.     { NOTHING,        0, 0,    (char *) 0 },
  1648.  
  1649.     { NOTHING,        0, 0,    (char *) 0 },    /* 128 */
  1650.     { NOTHING,        0, 0,    (char *) 0 },
  1651.     { NOTHING,        0, 0,    (char *) 0 },
  1652.     { NOTHING,        0, 0,    (char *) 0 },
  1653.     { NOTHING,        0, 0,    (char *) 0 },
  1654.     { NOTHING,        0, 0,    (char *) 0 },
  1655.     { NOTHING,        0, 0,    (char *) 0 },
  1656.     { NOTHING,        0, 0,    (char *) 0 },
  1657.  
  1658.     { NOTHING,        0, 0,    (char *) 0 },    /* 136 */
  1659.     { NOTHING,        0, 0,    (char *) 0 },
  1660.     { NOTHING,        0, 0,    (char *) 0 },
  1661.     { NOTHING,        0, 0,    (char *) 0 },
  1662.     { NOTHING,        0, 0,    (char *) 0 },
  1663.     { NOTHING,        0, 0,    (char *) 0 },
  1664.     { NOTHING,        0, 0,    (char *) 0 },
  1665.     { NOTHING,        0, 0,    (char *) 0 },
  1666.  
  1667.     { NOTHING,        0, 0,    (char *) 0 },    /* 144 */
  1668.     { NOTHING,        0, 0,    (char *) 0 },
  1669.     { NOTHING,        0, 0,    (char *) 0 },
  1670.     { NOTHING,        0, 0,    (char *) 0 },
  1671.     { NOTHING,        0, 0,    (char *) 0 },
  1672.     { NOTHING,        0, 0,    (char *) 0 },
  1673.     { NOTHING,        0, 0,    (char *) 0 },
  1674.     { NOTHING,        0, 0,    (char *) 0 },
  1675.  
  1676.     { NOTHING,        0, 0,    (char *) 0 },    /* 152 */
  1677.     { NOTHING,        0, 0,    (char *) 0 },
  1678.     { NOTHING,        0, 0,    (char *) 0 },
  1679.     { NOTHING,        0, 0,    (char *) 0 },
  1680.     { NOTHING,        0, 0,    (char *) 0 },
  1681.     { NOTHING,        0, 0,    (char *) 0 },
  1682.     { NOTHING,        0, 0,    (char *) 0 },
  1683.     { NOTHING,        0, 0,    (char *) 0 },
  1684.  
  1685.     { NOTHING,        0, 0,    (char *) 0 },    /* 160 */
  1686.     { NOTHING,        0, 0,    (char *) 0 },
  1687.     { NOTHING,        0, 0,    (char *) 0 },
  1688.     { NOTHING,        0, 0,    (char *) 0 },
  1689.     { NOTHING,        0, 0,    (char *) 0 },
  1690.     { NOTHING,        0, 0,    (char *) 0 },
  1691.     { NOTHING,        0, 0,    (char *) 0 },
  1692.     { NOTHING,        0, 0,    (char *) 0 },
  1693.  
  1694.     { NOTHING,        0, 0,    (char *) 0 },    /* 168 */
  1695.     { NOTHING,        0, 0,    (char *) 0 },
  1696.     { NOTHING,        0, 0,    (char *) 0 },
  1697.     { NOTHING,        0, 0,    (char *) 0 },
  1698.     { NOTHING,        0, 0,    (char *) 0 },
  1699.     { NOTHING,        0, 0,    (char *) 0 },
  1700.     { NOTHING,        0, 0,    (char *) 0 },
  1701.     { NOTHING,        0, 0,    (char *) 0 },
  1702.  
  1703.     { NOTHING,        0, 0,    (char *) 0 },    /* 176 */
  1704.     { NOTHING,        0, 0,    (char *) 0 },
  1705.     { NOTHING,        0, 0,    (char *) 0 },
  1706.     { NOTHING,        0, 0,    (char *) 0 },
  1707.     { NOTHING,        0, 0,    (char *) 0 },
  1708.     { NOTHING,        0, 0,    (char *) 0 },
  1709.     { NOTHING,        0, 0,    (char *) 0 },
  1710.     { NOTHING,        0, 0,    (char *) 0 },
  1711.  
  1712.     { NOTHING,        0, 0,    (char *) 0 },    /* 184 */
  1713.     { NOTHING,        0, 0,    (char *) 0 },
  1714.     { NOTHING,        0, 0,    (char *) 0 },
  1715.     { NOTHING,        0, 0,    (char *) 0 },
  1716.     { NOTHING,        0, 0,    (char *) 0 },
  1717.     { NOTHING,        0, 0,    (char *) 0 },
  1718.     { NOTHING,        0, 0,    (char *) 0 },
  1719.     { NOTHING,        0, 0,    (char *) 0 },
  1720.  
  1721.     { NOTHING,        0, 0,    (char *) 0 },    /* 192 */
  1722.     { NOTHING,        0, 0,    (char *) 0 },
  1723.     { NOTHING,        0, 0,    (char *) 0 },
  1724.     { NOTHING,        0, 0,    (char *) 0 },
  1725.     { NOTHING,        0, 0,    (char *) 0 },
  1726.     { NOTHING,        0, 0,    (char *) 0 },
  1727.     { NOTHING,        0, 0,    (char *) 0 },
  1728.     { NOTHING,        0, 0,    (char *) 0 },
  1729.  
  1730.     { NOTHING,        0, 0,    (char *) 0 },    /* 200 */
  1731.     { NOTHING,        0, 0,    (char *) 0 },
  1732.     { NOTHING,        0, 0,    (char *) 0 },
  1733.     { NOTHING,        0, 0,    (char *) 0 },
  1734.     { NOTHING,        0, 0,    (char *) 0 },
  1735.     { NOTHING,        0, 0,    (char *) 0 },
  1736.     { NOTHING,        0, 0,    (char *) 0 },
  1737.     { NOTHING,        0, 0,    (char *) 0 },
  1738.  
  1739.     { NOTHING,        0, 0,    (char *) 0 },    /* 208 */
  1740.     { NOTHING,        0, 0,    (char *) 0 },
  1741.     { NOTHING,        0, 0,    (char *) 0 },
  1742.     { NOTHING,        0, 0,    (char *) 0 },
  1743.     { NOTHING,        0, 0,    (char *) 0 },
  1744.     { NOTHING,        0, 0,    (char *) 0 },
  1745.     { NOTHING,        0, 0,    (char *) 0 },
  1746.     { NOTHING,        0, 0,    (char *) 0 },
  1747.  
  1748.     { NOTHING,        0, 0,    (char *) 0 },    /* 216 */
  1749.     { NOTHING,        0, 0,    (char *) 0 },
  1750.     { NOTHING,        0, 0,    (char *) 0 },
  1751.     { NOTHING,        0, 0,    (char *) 0 },
  1752.     { NOTHING,        0, 0,    (char *) 0 },
  1753.     { NOTHING,        0, 0,    (char *) 0 },
  1754.     { NOTHING,        0, 0,    (char *) 0 },
  1755.     { NOTHING,        0, 0,    (char *) 0 },
  1756.  
  1757.     { NOTHING,        0, 0,    (char *) 0 },    /* 224 */
  1758.     { NOTHING,        0, 0,    (char *) 0 },
  1759.     { NOTHING,        0, 0,    (char *) 0 },
  1760.     { NOTHING,        0, 0,    (char *) 0 },
  1761.     { NOTHING,        0, 0,    (char *) 0 },
  1762.     { NOTHING,        0, 0,    (char *) 0 },
  1763.     { NOTHING,        0, 0,    (char *) 0 },
  1764.     { NOTHING,        0, 0,    (char *) 0 },
  1765.  
  1766.     { NOTHING,        0, 0,    (char *) 0 },    /* 232 */
  1767.     { NOTHING,        0, 0,    (char *) 0 },
  1768.     { NOTHING,        0, 0,    (char *) 0 },
  1769.     { NOTHING,        0, 0,    (char *) 0 },
  1770.     { NOTHING,        0, 0,    (char *) 0 },
  1771.     { NOTHING,        0, 0,    (char *) 0 },
  1772.     { NOTHING,        0, 0,    (char *) 0 },
  1773.     { NOTHING,        0, 0,    (char *) 0 },
  1774.  
  1775.     { NOTHING,        0, 0,    (char *) 0 },    /* 240 */
  1776.     { NOTHING,        0, 0,    (char *) 0 },
  1777.     { NOTHING,        0, 0,    (char *) 0 },
  1778.     { NOTHING,        0, 0,    (char *) 0 },
  1779.     { NOTHING,        0, 0,    (char *) 0 },
  1780.     { NOTHING,        0, 0,    (char *) 0 },
  1781.     { NOTHING,        0, 0,    (char *) 0 },
  1782.     { NOTHING,        0, 0,    (char *) 0 },
  1783.  
  1784.     { NOTHING,        0, 0,    (char *) 0 },    /* 248 */
  1785.     { NOTHING,        0, 0,    (char *) 0 },
  1786.     { NOTHING,        0, 0,    (char *) 0 },
  1787.     { NOTHING,        0, 0,    (char *) 0 },
  1788.     { NOTHING,        0, 0,    (char *) 0 },
  1789.     { NOTHING,        0, 0,    (char *) 0 },
  1790.     { NOTHING,        0, 0,    (char *) 0 },
  1791.     { NOTHING,        0, 0,    (char *) 0 }
  1792. };
  1793.  
  1794. KeyMap    FAR meta4_keys[] =
  1795. {
  1796.     { NOTHING,        0, 0,    (char *) 0 },    /* 0 */
  1797.     { NOTHING,        0, 0,    (char *) 0 },
  1798.     { NOTHING,        0, 0,    (char *) 0 },
  1799.     { NOTHING,        0, 0,    (char *) 0 },
  1800.     { NOTHING,        0, 0,    (char *) 0 },
  1801.     { NOTHING,        0, 0,    (char *) 0 },
  1802.     { NOTHING,        0, 0,    (char *) 0 },
  1803.     { NOTHING,        0, 0,    (char *) 0 },
  1804.  
  1805.     { BACKWARD_CHARACTER,    0, 0,    (char *) 0 },    /* 8 */
  1806.     { NOTHING,        0, 0,    (char *) 0 },
  1807.     { NOTHING,        0, 0,    (char *) 0 },
  1808.     { NOTHING,        0, 0,    (char *) 0 },
  1809.     { NOTHING,        0, 0,    (char *) 0 },
  1810.     { NOTHING,        0, 0,    (char *) 0 },
  1811.     { NOTHING,        0, 0,    (char *) 0 },
  1812.     { NOTHING,        0, 0,    (char *) 0 },
  1813.  
  1814.     { NOTHING,        0, 0,    (char *) 0 },    /* 16 */
  1815.     { NOTHING,        0, 0,    (char *) 0 },
  1816.     { NOTHING,        0, 0,    (char *) 0 },
  1817.     { NOTHING,        0, 0,    (char *) 0 },
  1818.     { NOTHING,        0, 0,    (char *) 0 },
  1819.     { NOTHING,        0, 0,    (char *) 0 },
  1820.     { NOTHING,        0, 0,    (char *) 0 },
  1821.     { NOTHING,        0, 0,    (char *) 0 },
  1822.  
  1823.     { NOTHING,        0, 0,    (char *) 0 },    /* 24 */
  1824.     { NOTHING,        0, 0,    (char *) 0 },
  1825.     { NOTHING,        0, 0,    (char *) 0 },
  1826.     { NOTHING,        0, 0,    (char *) 0 },
  1827.     { NOTHING,        0, 0,    (char *) 0 },
  1828.     { NOTHING,        0, 0,    (char *) 0 },
  1829.     { NOTHING,        0, 0,    (char *) 0 },
  1830.     { NOTHING,        0, 0,    (char *) 0 },
  1831.  
  1832.     { FORWARD_CHARACTER,    0, 0,    (char *) 0 },    /* 32 */
  1833.     { NOTHING,        0, 0,    (char *) 0 },
  1834.     { NOTHING,        0, 0,    (char *) 0 },
  1835.     { NOTHING,        0, 0,    (char *) 0 },
  1836.     { NOTHING,        0, 0,    (char *) 0 },
  1837.     { NOTHING,        0, 0,    (char *) 0 },
  1838.     { NOTHING,        0, 0,    (char *) 0 },
  1839.     { NOTHING,        0, 0,    (char *) 0 },
  1840.  
  1841.     { NOTHING,        0, 0,    (char *) 0 },    /* 40 */
  1842.     { NOTHING,        0, 0,    (char *) 0 },
  1843.     { NOTHING,        0, 0,    (char *) 0 },
  1844.     { NOTHING,        0, 0,    (char *) 0 },
  1845.     { NOTHING,        0, 0,    (char *) 0 },
  1846.     { NOTHING,        0, 0,    (char *) 0 },
  1847.     { NOTHING,        0, 0,    (char *) 0 },
  1848.     { NOTHING,        0, 0,    (char *) 0 },
  1849.  
  1850.     { NOTHING,        0, 0,    (char *) 0 },    /* 48 */
  1851.     { NOTHING,        0, 0,    (char *) 0 },
  1852.     { NOTHING,        0, 0,    (char *) 0 },
  1853.     { NOTHING,        0, 0,    (char *) 0 },
  1854.     { NOTHING,        0, 0,    (char *) 0 },
  1855.     { NOTHING,        0, 0,    (char *) 0 },
  1856.     { NOTHING,        0, 0,    (char *) 0 },
  1857.     { NOTHING,        0, 0,    (char *) 0 },
  1858.  
  1859.     { NOTHING,        0, 0,    (char *) 0 },    /* 56 */
  1860.     { NOTHING,        0, 0,    (char *) 0 },
  1861.     { NOTHING,        0, 0,    (char *) 0 },
  1862.     { NOTHING,        0, 0,    (char *) 0 },
  1863.     { NOTHING,        0, 0,    (char *) 0 },
  1864.     { NOTHING,        0, 0,    (char *) 0 },
  1865.     { NOTHING,        0, 0,    (char *) 0 },
  1866.     { NOTHING,        0, 0,    (char *) 0 },
  1867.  
  1868.     { NOTHING,        0, 0,    (char *) 0 },    /* 64 */
  1869.     { META4_CHARACTER,    0, 0,    (char *) 0 },
  1870.     { NOTHING,        0, 0,    (char *) 0 },
  1871.     { NOTHING,        0, 0,    (char *) 0 },
  1872.     { NOTHING,        0, 0,    (char *) 0 },
  1873.     { NOTHING,        0, 0,    (char *) 0 },
  1874.     { NOTHING,        0, 0,    (char *) 0 },
  1875.     { NOTHING,        0, 0,    (char *) 0 },
  1876.  
  1877.     { BACKWARD_CHARACTER,    0, 0,    (char *) 0 },    /* 72 */
  1878.     { META4_CHARACTER,    0, 0,    (char *) 0 },
  1879.     { FORWARD_HISTORY,    0, 0,    (char *) 0 },
  1880.     { BACKWARD_HISTORY,    0, 0,    (char *) 0 },
  1881.     { FORWARD_CHARACTER,    0, 0,    (char *) 0 },
  1882.     { NOTHING,        0, 0,    (char *) 0 },
  1883.     { NOTHING,        0, 0,    (char *) 0 },
  1884.     { NOTHING,        0, 0,    (char *) 0 },
  1885.  
  1886.     { NOTHING,        0, 0,    (char *) 0 },    /* 80 */
  1887.     { NOTHING,        0, 0,    (char *) 0 },
  1888.     { NOTHING,        0, 0,    (char *) 0 },
  1889.     { NOTHING,        0, 0,    (char *) 0 },
  1890.     { NOTHING,        0, 0,    (char *) 0 },
  1891.     { NOTHING,        0, 0,    (char *) 0 },
  1892.     { NOTHING,        0, 0,    (char *) 0 },
  1893.     { NOTHING,        0, 0,    (char *) 0 },
  1894.  
  1895.     { DELETE_CHARACTER,    0, 0,    (char *) 0 },    /* 88 */
  1896.     { NOTHING,        0, 0,    (char *) 0 },
  1897.     { NOTHING,        0, 0,    (char *) 0 },
  1898.     { NOTHING,        0, 0,    (char *) 0 },
  1899.     { NOTHING,        0, 0,    (char *) 0 },
  1900.     { NOTHING,        0, 0,    (char *) 0 },
  1901.     { NOTHING,        0, 0,    (char *) 0 },
  1902.     { NOTHING,        0, 0,    (char *) 0 },
  1903.  
  1904.     { NOTHING,        0, 0,    (char *) 0 },    /* 96 */
  1905.     { META4_CHARACTER,    0, 0,    (char *) 0 },
  1906.     { NOTHING,        0, 0,    (char *) 0 },
  1907.     { NOTHING,        0, 0,    (char *) 0 },
  1908.     { NOTHING,        0, 0,    (char *) 0 },
  1909.     { NOTHING,        0, 0,    (char *) 0 },
  1910.     { NOTHING,        0, 0,    (char *) 0 },
  1911.     { NOTHING,        0, 0,    (char *) 0 },
  1912.  
  1913.     { BACKWARD_CHARACTER,    0, 0,    (char *) 0 },    /* 104 */
  1914.     { META4_CHARACTER,    0, 0,    (char *) 0 },
  1915.     { FORWARD_HISTORY,    0, 0,    (char *) 0 },
  1916.     { BACKWARD_HISTORY,    0, 0,    (char *) 0 },
  1917.     { FORWARD_CHARACTER,    0, 0,    (char *) 0 },
  1918.     { NOTHING,        0, 0,    (char *) 0 },
  1919.     { NOTHING,        0, 0,    (char *) 0 },
  1920.     { NOTHING,        0, 0,    (char *) 0 },
  1921.  
  1922.     { NOTHING,        0, 0,    (char *) 0 },    /* 112 */
  1923.     { NOTHING,        0, 0,    (char *) 0 },
  1924.     { NOTHING,        0, 0,    (char *) 0 },
  1925.     { NOTHING,        0, 0,    (char *) 0 },
  1926.     { NOTHING,        0, 0,    (char *) 0 },
  1927.     { NOTHING,        0, 0,    (char *) 0 },
  1928.     { NOTHING,        0, 0,    (char *) 0 },
  1929.     { NOTHING,        0, 0,    (char *) 0 },
  1930.  
  1931.     { DELETE_CHARACTER,    0, 0,    (char *) 0 },    /* 120 */
  1932.     { NOTHING,        0, 0,    (char *) 0 },
  1933.     { NOTHING,        0, 0,    (char *) 0 },
  1934.     { NOTHING,        0, 0,    (char *) 0 },
  1935.     { NOTHING,        0, 0,    (char *) 0 },
  1936.     { NOTHING,        0, 0,    (char *) 0 },
  1937.     { NOTHING,        0, 0,    (char *) 0 },
  1938.     { NOTHING,        0, 0,    (char *) 0 },
  1939.  
  1940.     { NOTHING,        0, 0,    (char *) 0 },    /* 128 */
  1941.     { NOTHING,        0, 0,    (char *) 0 },
  1942.     { NOTHING,        0, 0,    (char *) 0 },
  1943.     { NOTHING,        0, 0,    (char *) 0 },
  1944.     { NOTHING,        0, 0,    (char *) 0 },
  1945.     { NOTHING,        0, 0,    (char *) 0 },
  1946.     { NOTHING,        0, 0,    (char *) 0 },
  1947.     { NOTHING,        0, 0,    (char *) 0 },
  1948.  
  1949.     { NOTHING,        0, 0,    (char *) 0 },    /* 136 */
  1950.     { NOTHING,        0, 0,    (char *) 0 },
  1951.     { NOTHING,        0, 0,    (char *) 0 },
  1952.     { NOTHING,        0, 0,    (char *) 0 },
  1953.     { NOTHING,        0, 0,    (char *) 0 },
  1954.     { NOTHING,        0, 0,    (char *) 0 },
  1955.     { NOTHING,        0, 0,    (char *) 0 },
  1956.     { NOTHING,        0, 0,    (char *) 0 },
  1957.  
  1958.     { NOTHING,        0, 0,    (char *) 0 },    /* 144 */
  1959.     { NOTHING,        0, 0,    (char *) 0 },
  1960.     { NOTHING,        0, 0,    (char *) 0 },
  1961.     { NOTHING,        0, 0,    (char *) 0 },
  1962.     { NOTHING,        0, 0,    (char *) 0 },
  1963.     { NOTHING,        0, 0,    (char *) 0 },
  1964.     { NOTHING,        0, 0,    (char *) 0 },
  1965.     { NOTHING,        0, 0,    (char *) 0 },
  1966.  
  1967.     { NOTHING,        0, 0,    (char *) 0 },    /* 152 */
  1968.     { NOTHING,        0, 0,    (char *) 0 },
  1969.     { NOTHING,        0, 0,    (char *) 0 },
  1970.     { NOTHING,        0, 0,    (char *) 0 },
  1971.     { NOTHING,        0, 0,    (char *) 0 },
  1972.     { NOTHING,        0, 0,    (char *) 0 },
  1973.     { NOTHING,        0, 0,    (char *) 0 },
  1974.     { NOTHING,        0, 0,    (char *) 0 },
  1975.  
  1976.     { NOTHING,        0, 0,    (char *) 0 },    /* 160 */
  1977.     { NOTHING,        0, 0,    (char *) 0 },
  1978.     { NOTHING,        0, 0,    (char *) 0 },
  1979.     { NOTHING,        0, 0,    (char *) 0 },
  1980.     { NOTHING,        0, 0,    (char *) 0 },
  1981.     { NOTHING,        0, 0,    (char *) 0 },
  1982.     { NOTHING,        0, 0,    (char *) 0 },
  1983.     { NOTHING,        0, 0,    (char *) 0 },
  1984.  
  1985.     { NOTHING,        0, 0,    (char *) 0 },    /* 168 */
  1986.     { NOTHING,        0, 0,    (char *) 0 },
  1987.     { NOTHING,        0, 0,    (char *) 0 },
  1988.     { NOTHING,        0, 0,    (char *) 0 },
  1989.     { NOTHING,        0, 0,    (char *) 0 },
  1990.     { NOTHING,        0, 0,    (char *) 0 },
  1991.     { NOTHING,        0, 0,    (char *) 0 },
  1992.     { NOTHING,        0, 0,    (char *) 0 },
  1993.  
  1994.     { NOTHING,        0, 0,    (char *) 0 },    /* 176 */
  1995.     { NOTHING,        0, 0,    (char *) 0 },
  1996.     { NOTHING,        0, 0,    (char *) 0 },
  1997.     { NOTHING,        0, 0,    (char *) 0 },
  1998.     { NOTHING,        0, 0,    (char *) 0 },
  1999.     { NOTHING,        0, 0,    (char *) 0 },
  2000.     { NOTHING,        0, 0,    (char *) 0 },
  2001.     { NOTHING,        0, 0,    (char *) 0 },
  2002.  
  2003.     { NOTHING,        0, 0,    (char *) 0 },    /* 184 */
  2004.     { NOTHING,        0, 0,    (char *) 0 },
  2005.     { NOTHING,        0, 0,    (char *) 0 },
  2006.     { NOTHING,        0, 0,    (char *) 0 },
  2007.     { NOTHING,        0, 0,    (char *) 0 },
  2008.     { NOTHING,        0, 0,    (char *) 0 },
  2009.     { NOTHING,        0, 0,    (char *) 0 },
  2010.     { NOTHING,        0, 0,    (char *) 0 },
  2011.  
  2012.     { NOTHING,        0, 0,    (char *) 0 },    /* 192 */
  2013.     { NOTHING,        0, 0,    (char *) 0 },
  2014.     { NOTHING,        0, 0,    (char *) 0 },
  2015.     { NOTHING,        0, 0,    (char *) 0 },
  2016.     { NOTHING,        0, 0,    (char *) 0 },
  2017.     { NOTHING,        0, 0,    (char *) 0 },
  2018.     { NOTHING,        0, 0,    (char *) 0 },
  2019.     { NOTHING,        0, 0,    (char *) 0 },
  2020.  
  2021.     { NOTHING,        0, 0,    (char *) 0 },    /* 200 */
  2022.     { NOTHING,        0, 0,    (char *) 0 },
  2023.     { NOTHING,        0, 0,    (char *) 0 },
  2024.     { NOTHING,        0, 0,    (char *) 0 },
  2025.     { NOTHING,        0, 0,    (char *) 0 },
  2026.     { NOTHING,        0, 0,    (char *) 0 },
  2027.     { NOTHING,        0, 0,    (char *) 0 },
  2028.     { NOTHING,        0, 0,    (char *) 0 },
  2029.  
  2030.     { NOTHING,        0, 0,    (char *) 0 },    /* 208 */
  2031.     { NOTHING,        0, 0,    (char *) 0 },
  2032.     { NOTHING,        0, 0,    (char *) 0 },
  2033.     { NOTHING,        0, 0,    (char *) 0 },
  2034.     { NOTHING,        0, 0,    (char *) 0 },
  2035.     { NOTHING,        0, 0,    (char *) 0 },
  2036.     { NOTHING,        0, 0,    (char *) 0 },
  2037.     { NOTHING,        0, 0,    (char *) 0 },
  2038.  
  2039.     { NOTHING,        0, 0,    (char *) 0 },    /* 216 */
  2040.     { NOTHING,        0, 0,    (char *) 0 },
  2041.     { NOTHING,        0, 0,    (char *) 0 },
  2042.     { NOTHING,        0, 0,    (char *) 0 },
  2043.     { NOTHING,        0, 0,    (char *) 0 },
  2044.     { NOTHING,        0, 0,    (char *) 0 },
  2045.     { NOTHING,        0, 0,    (char *) 0 },
  2046.     { NOTHING,        0, 0,    (char *) 0 },
  2047.  
  2048.     { NOTHING,        0, 0,    (char *) 0 },    /* 224 */
  2049.     { NOTHING,        0, 0,    (char *) 0 },
  2050.     { NOTHING,        0, 0,    (char *) 0 },
  2051.     { NOTHING,        0, 0,    (char *) 0 },
  2052.     { NOTHING,        0, 0,    (char *) 0 },
  2053.     { NOTHING,        0, 0,    (char *) 0 },
  2054.     { NOTHING,        0, 0,    (char *) 0 },
  2055.     { NOTHING,        0, 0,    (char *) 0 },
  2056.  
  2057.     { NOTHING,        0, 0,    (char *) 0 },    /* 232 */
  2058.     { NOTHING,        0, 0,    (char *) 0 },
  2059.     { NOTHING,        0, 0,    (char *) 0 },
  2060.     { NOTHING,        0, 0,    (char *) 0 },
  2061.     { NOTHING,        0, 0,    (char *) 0 },
  2062.     { NOTHING,        0, 0,    (char *) 0 },
  2063.     { NOTHING,        0, 0,    (char *) 0 },
  2064.     { NOTHING,        0, 0,    (char *) 0 },
  2065.  
  2066.     { NOTHING,        0, 0,    (char *) 0 },    /* 240 */
  2067.     { NOTHING,        0, 0,    (char *) 0 },
  2068.     { NOTHING,        0, 0,    (char *) 0 },
  2069.     { NOTHING,        0, 0,    (char *) 0 },
  2070.     { NOTHING,        0, 0,    (char *) 0 },
  2071.     { NOTHING,        0, 0,    (char *) 0 },
  2072.     { NOTHING,        0, 0,    (char *) 0 },
  2073.     { NOTHING,        0, 0,    (char *) 0 },
  2074.  
  2075.     { NOTHING,        0, 0,    (char *) 0 },    /* 248 */
  2076.     { NOTHING,        0, 0,    (char *) 0 },
  2077.     { NOTHING,        0, 0,    (char *) 0 },
  2078.     { NOTHING,        0, 0,    (char *) 0 },
  2079.     { NOTHING,        0, 0,    (char *) 0 },
  2080.     { NOTHING,        0, 0,    (char *) 0 },
  2081.     { NOTHING,        0, 0,    (char *) 0 },
  2082.     { NOTHING,        0, 0,    (char *) 0 }
  2083. };
  2084.  
  2085.  
  2086. /*
  2087.  * write_binding: This will write to the given FILE pointer the information
  2088.  * about the specified key binding.  The format it writes it out is such that
  2089.  * it can be parsed back in later using LOAD or with the -l switch 
  2090.  */
  2091. static    void
  2092. write_binding(c, meta, fp, do_all)
  2093.     unsigned char    c,
  2094.         meta;
  2095.     FILE    *fp;
  2096.     int    do_all;
  2097. {
  2098.     KeyMap    *map;
  2099.     char    *meta_str;
  2100.  
  2101.     if (c == 32)
  2102.         return;
  2103.     switch (meta)
  2104.     {
  2105.     case 1:
  2106.         map = meta1_keys;
  2107.         meta_str = "META1-";
  2108.         break;
  2109.     case 2:
  2110.         map = meta2_keys;
  2111.         meta_str = "META2-";
  2112.         break;
  2113.     case 3:
  2114.         map = meta3_keys;
  2115.         meta_str = "META3-";
  2116.         break;
  2117.     case 4:
  2118.         map = meta4_keys;
  2119.         meta_str = "META4-";
  2120.         break;
  2121.     default:
  2122.         map = keys;
  2123.         meta_str = empty_string;
  2124.         break;
  2125.     }
  2126.     if (map[c].changed)
  2127.     {
  2128.         fprintf(fp, "BIND %s%s %s", meta_str, display_key(c),
  2129.             key_names[map[c].index].name);
  2130.         if (map[c].stuff && (*(map[c].stuff)))
  2131.         {
  2132.             fprintf(fp, " %s\n", map[c].stuff);
  2133.         }
  2134.         else
  2135.             fprintf(fp, "\n");
  2136.     }
  2137. }
  2138.  
  2139. /*
  2140.  * save_bindings: this writes all the keys bindings for IRCII to the given
  2141.  * FILE pointer using the write_binding function 
  2142.  */
  2143. void
  2144. save_bindings(fp, do_all)
  2145.     FILE    *fp;
  2146.     int    do_all;
  2147. {
  2148.     int    i;
  2149.     int    charsize = charset_size();
  2150.  
  2151.     for (i = 0; i < charsize; i++)
  2152.         write_binding(i, 0, fp, do_all);
  2153.     for (i = 0; i < charsize; i++)
  2154.         write_binding(i, 1, fp, do_all);
  2155.     for (i = 0; i < charsize; i++)
  2156.         write_binding(i, 2, fp, do_all);
  2157.     for (i = 0; i < charsize; i++)
  2158.         write_binding(i, 3, fp, do_all);
  2159.     for (i = 0; i < charsize; i++)
  2160.         write_binding(i, 4, fp, do_all);
  2161. }
  2162.